在 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*(.+)
详情
COMPANY DETAILS
- 文字子串
\s+
- 1+ 空格
Date\s*:
- Date
, 0+ 个空格, :
.*\s*
- 之后有任何空格的行
(.+)
- 第 1 组:公司数据行。
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
我正在创建 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*(.+)
详情
COMPANY DETAILS
- 文字子串\s+
- 1+ 空格Date\s*:
-Date
, 0+ 个空格,:
.*\s*
- 之后有任何空格的行
(.+)
- 第 1 组:公司数据行。
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