我正在尝试匹配多行字符串 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'")
应将两个提出的案件都涵盖到可接受的状态