为了避免使用python regex引号内的模式

时间:2018-10-02 11:33:27

标签: python regex python-2.7

我试图按如下方式匹配多行字符串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()

1 个答案:

答案 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'")

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