Python 具有特定结尾的多行图案

Python 具有特定结尾的多行图案,python,regex,Python,Regex,我试图匹配某个多行模式,该模式在最后一行有特定的序列结尾 我使用re.DOTALL | re.MULTILINE来匹配MULTILINE,但它并没有捕捉到我想要的lst行的末尾 title = re.compile( r"TITLE\([^\"\);]*", re.DOTALL | re.MULTILINE ) titles = re.findall(patterns.title, file) 字符串的格式为: TITLE("blah blah_blah co

我试图匹配某个多行模式,该模式在最后一行有特定的序列结尾

我使用re.DOTALL | re.MULTILINE来匹配MULTILINE,但它并没有捕捉到我想要的lst行的末尾

title = re.compile(
    r"TITLE\([^\"\);]*",
    re.DOTALL | re.MULTILINE
)

titles = re.findall(patterns.title, file)
字符串的格式为:

TITLE("blah blah_blah contain_" contain_) contain_; but_not_"); "); 标题(“废话 废话 包含 包含) 包含!; 但不是; ");
结果是
Title(“
,但我需要所有字符串)。

解决这个问题的一个方法是使用一个前瞻性测试“结束令牌”,在您的例子中是

将匹配示例字符串的这一部分

blah_blah
contain_"
contain_)
contain_;
but_not_
说明:

TITLE # literal: TITLE (case-insensitive with re.IGNORECASE) \(\" # literal: (" ( # group 1 (?: # non-capturing group (?! # negative look-ahead \"\); # not followed by: "); ) # end look-ahead . # match next character (including \n with re.DOTALL) )* # end non-capturing group, repeat ) # end group 1 (will contain the final match) TITLE#literal:TITLE(不区分大小写,带re.IGNORECASE) \(\“#文字:(“ (#第一组) (?:#非捕获组 (?!#消极展望未来 \“\);”后面不跟“); )#结束展望未来 .#匹配下一个字符(包括\n与re.DOTALL) )*#结束非捕获组,重复 )#第1组结束(将包含最后一场比赛)

解决这个问题的一种方法是使用前瞻测试“结束令牌”,在您的例子中是
”;

将匹配示例字符串的这一部分

blah_blah
contain_"
contain_)
contain_;
but_not_
说明:

TITLE # literal: TITLE (case-insensitive with re.IGNORECASE) \(\" # literal: (" ( # group 1 (?: # non-capturing group (?! # negative look-ahead \"\); # not followed by: "); ) # end look-ahead . # match next character (including \n with re.DOTALL) )* # end non-capturing group, repeat ) # end group 1 (will contain the final match) TITLE#literal:TITLE(不区分大小写,带re.IGNORECASE) \(\“#文字:(“ (#第一组) (?:#非捕获组 (?!#消极展望未来 \“\);”后面不跟“); )#结束展望未来 .#匹配下一个字符(包括\n与re.DOTALL) )*#结束非捕获组,重复 )#第1组结束(将包含最后一场比赛)

re.DOTALL | re.MULTILINE
完全不影响您的模式。@WiktorStribiżew我认为它会影响,因为当模式是例如r“TITLE(.*”时,它会返回我想要的内容以及后面的所有内容”);斯维塔,你的问题中有
r“TITLE\([^\”);]*“
。当然
re.DOTALL
会影响
,但是你在
r“TITLE\([^\”);]*“
re.DOTALL\124; re.MULTILINE
中没有
,根本不会影响你的模式。@WiktorStribiż它会返回我想要的,并且在“;Sveta”之后返回所有内容,您在问题中有
r“TITLE\([^\”);]*”
。当然
re.DOTALL
会影响
,但是
r“TITLE\([^\”);]*“
中没有