避免使用 python 正则表达式在引号内出现模式



我正在尝试匹配多行字符串 str,如下所示,

call fun (TP$NULL, 
ERROR_CODE,
PROG_ID || 'Password Incorrect, Please try again') /*END*/

我想处理这个字符串而不缺少任何内容(即空格、制表符和换行符(

我尝试通过使用逗号来获取它,该逗号分隔三个参数

re.search (r'(s*calls+funs*()(.+),(.+),(.+)().*)', str, re.DOTALL).groups
('call fun (', 'TP$NULL, ERROR_CODE', " PROG_ID || 'Password Incorrect", " Please try again'", ') /*END*/')

请参阅第三个参数中的引号内的逗号会产生问题。

当我尝试下面的正则表达式时,

re.search (r'call fun ((.+),(.+), (.*'.*,.*'.*))' , str, re.DOTALL).groups()

上面的案例有效,但下面的字符串 str2 不起作用。

call fun (TP$NULL, err, PROG_D) 

我尝试了如下负面展望,但没有运气,

re.search (r'call fun ((.+),(.+),(?!'.+')(.+))' , str, re.DOTALL).groups()

您可能只是希望前 2 组不要贪婪,例如使用您以前到最后一个版本:

>>> for g in re.search (r'call fun ((.+?),(.+?),(.*))', str2, re.DOTALL).groups():
...     print(g)
...
TP$NULL
err
PROG_D

>>> re.search (r'call fun ((.+?),(.+?),(.*))', str1, re.DOTALL).groups()
('TP$NULL', ' n    ERROR_CODE', "n    PROG_ID || 'Password Incorrect, Please try again'")

应将两个提出的案件都涵盖到可接受的状态

最新更新