具有特定结尾的多行图案

时间:2019-06-26 11:31:51

标签: python regex

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

我正在使用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(",但我需要所有字符串。

1 个答案:

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

https://regex101.com/r/km3uuV/1