Python 具有特定结尾的多行图案
我试图匹配某个多行模式,该模式在最后一行有特定的序列结尾 我使用re.DOTALL | re.MULTILINE来匹配MULTILINE,但它并没有捕捉到我想要的lst行的末尾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
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\([^\”);]*“
中没有