如何在Python中使用正则表达式匹配双换行符“\n\n”之前的所有内容?

And*_*rew 4 python regex

假设我有以下 Python 字符串

str = """
....
Dummyline

Start of matching
+----------+----------------------------+
+   test   +           1234             +
+   test2  +           5678             +
+----------+----------------------------+

Finish above. Do not match this
+----------+----------------------------+
+  dummy1  +       00000000000          +
+  dummy2  +       12345678910          +
+----------+----------------------------+
"""
Run Code Online (Sandbox Code Playgroud)

我想匹配第一个表中的所有内容。我可以使用从开始匹配的正则表达式

"Start"
Run Code Online (Sandbox Code Playgroud)

并匹配所有内容,直到找到双换行符

"Start"
Run Code Online (Sandbox Code Playgroud)

我在另一篇 stackoverflow 帖子中找到了一些有关如何执行此操作的提示(如何在正则表达式中匹配“直到此字符序列的任何内容”?),但它似乎不适用于双换行符情况。

我想到了下面的代码

\n\n
Run Code Online (Sandbox Code Playgroud)

基本上在哪里

pattern = re.compile(r"Start[^\n\n]")
matches = pattern.finditer(str)
Run Code Online (Sandbox Code Playgroud)

表示匹配所有内容,直到找到字符 x。但这仅适用于字符,不适用于字符串(在本例中为“\n\n”)

有人对此有什么想法吗?

The*_*ird 11

您可以匹配Start 直到行尾,然后使用负先行匹配以换行符开头且后面不紧接着换行符的所有行(?!

^Start .*(?:\r?\n(?!\r?\n).*)*
Run Code Online (Sandbox Code Playgroud)

解释

  • ^Start .*Start 从字符串开头匹配^0+ 次任何字符(换行符除外)
  • (?:非捕获组
    • \r?\n匹配换行符
    • (?!\r?\n)负向前瞻,断言直接右侧的内容不是换行符
    • .*匹配 0+ 次除换行符之外的任何字符
  • )*关闭非捕获组并重复0+次以获取所有行

正则表达式演示

  • 我不太确定这是做什么的,但它确实有效。多谢!我会花一些时间来理解这个正则表达式 (2认同)