我试图匹配某些多行模式,该模式具有最后一行的特定序列结尾。
我正在使用re.DOTALL | re.MULTILINE可以匹配多行,但不能捕获我想要的第一行的结尾。
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("
,但我需要所有字符串。
答案 0 :(得分:0)
解决此问题的一种方法是使用前瞻性测试“结束令牌”(在您的情况下为");
re.compile(r"TITLE\(\"((?:(?!\"\);).)*)", re.DOTALL | re.IGNORECASE)
将与示例字符串的这一部分匹配
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)