在 YML Regex 中跳过多行

Skip multiple lines in YML Regex

我正在创建 YML 模板来匹配文件(通过 Python 解析),在 YML 模板中我必须输入与输入文件和 Python 匹配的字段,然后转换成数据库(CSV 文件)。

但是我在匹配公司详细信息时遇到了问题。该文件的一部分如下所示:

COMPANY DETAILS

Date : 01-06-2018

ABC Industries
12-31 Lane
New York

Contact No. 1111

而这家公司实际上是 ABC Industries。但在我的文件中,Date 位于 COMPANY DETAILS 文本和实际公司详细信息之间。

我将 Date 匹配为:

date: Date :\s+(\d+\-\d+\-\d+)

在 YML 模板文件中。但是我无法匹配公司详细信息。

我正在使用这样的正则表达式来跳过以文本 DATE:

开头的行
company: COMPANY DETAILS\s+^(Date :.*)?([A-Za-z\s*]*)\s+Contact No.

但它不起作用。请帮助我使用正确的正则表达式来跳过任何空白行或以 Date : 开头的行,以便我可以从文本中提取正确的公司详细信息。

提前致谢。


编辑

这个问题现在已经解决了。

COMPANY DETAILS\s+Date :\s+\d+\-\d+\-\d+\s+([A-Z ]*)\n

成功了。

使用re.search

演示:

import re
s = """COMAPNY DETAILS

Date : 01-06-2018

ABC Industries
12-31 Lane
New York

Contact No. 1111"""

m = re.search("(?<=COMAPNY DETAILS)(?P<company>.*?(?=Contact))", s, flags=re.DOTALL)
if m:
    print( m.group('company') )

输出:

ABC Industries
12-31 Lane
New York

您可以使用

COMPANY DETAILS\s+Date\s*:.*\s*(.+)

regex demo

详情

  • COMPANY DETAILS - 文字子串
  • \s+ - 1+ 空格
  • Date\s*: - Date, 0+ 个空格, :
  • .*\s* -
  • 之后有任何空格的行
  • (.+) - 第 1 组:公司数据行。

Python demo:

import re
rx = r"COMPANY DETAILS\s+Date\s*:.*\s*(.+)"
s = "COMPANY DETAILS\n\nDate : 01-06-2018\n\nABC Industries\n12-31 Lane\nNew York\n\nContact No. 1111"
m = re.search(rx, s, re.MULTILINE)
if m:
    print(m.group(1)) # => ABC Industries