我试图按如下方式匹配多行字符串str,
call fun (TP$NULL,
ERROR_CODE,
PROG_ID || 'Password Incorrect, Please try again') /*END*/
我想处理此字符串而不会丢失任何内容(例如空格,制表符和换行符)
我尝试使用逗号分隔三个参数来获取它
re.search (r'(\s*call\s+fun\s*\()(.+),(.+),(.+)(\).*)', 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()
答案 0 :(得分:0)
您可能只希望前两个组不要贪心,例如使用您以前的版本到最新的版本:
>>> 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'")
应将两个提出的案例都覆盖到可接受的状态