【问题标题】:Match between lines while skipping pattern with Regex使用正则表达式跳过模式时在行之间匹配
【发布时间】:2017-01-24 07:00:44
【问题描述】:

我一直在尝试在跳过模式时在行之间进行匹配。 我正在使用re.DOTALL 正则表达式标志。

我需要提取的是

CHINTHAPUDI<br/>
CHINTHAPUDI<br/>

在选举人姓名和父亲姓名之间。

我目前收集的是这个正则表达式:

(?:^Elector\'s Name:.*?<br/>)(.*?)^(?:Husband|Father)

但它与第一​​个匹配项下方的其他 Elector's Name 行匹配。

Link to my regex101

这是我要匹配的文档:

Elector's Name: ANANTH CHINTAPUDI<br/>
Elector's Name: THIRUPATHI <br/>
Elector's Name: SRINIVASH <br/>
CHINTHAPUDI<br/>
CHINTHAPUDI<br/>
Father's Name: POSHANNA <br/>
Father's Name: SHANKAR <br/>
Father's Name: SHANKAR <br/>
CHINTAPUDDI<br/>
CHINTHAPUDI<br/>
CHINTHAPUDI<br/>

我该如何从最后一个Elector's Name 匹配到Father's Name

【问题讨论】:

  • 如果您删除多行限定符,并且之前的行以Elector's NameFather 开头的要求相当简单 - 没有时间更多地使用它来保持这个标准。 regex101.com/r/jbbnWD/3
  • 哇!非常感谢!你可以把它写下来作为答案,这样我就可以接受了:)

标签: python regex


【解决方案1】:

这是一个适用于您提供的输入的选项:

(?:Elector\'s Name:.*?&lt;br/&gt;\r?\n)+(.*?)(?:Husband|Father)

如果您使用它,您应该考虑一个潜在的问题:如果Elector's Name 出现在文档的前面,则将使用第一个集合。见demo

此外,由于您的正则表达式尝试要求 Elector's NameHusbandFather 位于行首,因此这里有一个保持该要求的版本。如果可能的话,我会避免这种情况,因为它会导致检查速度慢得多(30 倍)。

(?:\r?\nElector\'s Name:.*?&lt;br/&gt;)+\r?\n(.*?)\r?\n(?=Husband|Father)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多