带有可选插入短语的多行字符串匹配器
Multi line string matcher with optional intervening phrase
我想抓取分布在两行之间的文本。
例如:
PO Number Dept.number
4000813852 7
我想获得采购订单号4000813852
它就像一个基于 table 的数据,但在整个文档的上下文中似乎是普通文本。
我用过re.MULTILINE
像r'PO Number.*\n[0-9]+'
它在这种情况下有效,但它不是最佳解决方案,因为可能 PO 编号 位于中间,因为
Invoice Number PO Number Dept.number
123456666 4000813852 7
您可以使用两个捕获组并启用 re.DOTALL
选项来执行此操作。该表达式假定您感兴趣的数字是您文本中唯一一个包含 10 位数字的数字。
表达式为:
(PO\sNumber).*(\d{10})
Python 片段:
import re
first_string = """PO Number Dept.number
4000813852 7"""
second_string = """Invoice Number PO Number Dept.number
123456666 4000813853 7"""
PO_first = re.search(r'(PO\sNumber).*(\d{10})',first_string,re.DOTALL)
print(PO_first.group(1)+" "+PO_first.group(2))
PO_second = re.search(r'(PO\sNumber).*(\d{10})',second_string,re.DOTALL)
print(PO_second.group(1)+" "+PO_second.group(2))
输出:
PO Number 4000813852
PO Number 4000813853
使用一个正则表达式:
data="""PO Number Dept.number
4000813852 7
Invoice Number PO Number Dept.number
123456666 4000813852 7
"""
re.findall(r"(PO Number)\s*Dept.number\s*(?:(?:\d+)\s+(\d+)|(\d+))\s+\d",data)
Out:
[('PO Number', '', '4000813852'), ('PO Number', '4000813852', '')]
我不使用 re.MULTILINE,因为 \s 也匹配换行符。
我想抓取分布在两行之间的文本。
例如:
PO Number Dept.number
4000813852 7
我想获得采购订单号4000813852 它就像一个基于 table 的数据,但在整个文档的上下文中似乎是普通文本。
我用过re.MULTILINE
像r'PO Number.*\n[0-9]+'
它在这种情况下有效,但它不是最佳解决方案,因为可能 PO 编号 位于中间,因为
Invoice Number PO Number Dept.number
123456666 4000813852 7
您可以使用两个捕获组并启用 re.DOTALL
选项来执行此操作。该表达式假定您感兴趣的数字是您文本中唯一一个包含 10 位数字的数字。
表达式为:
(PO\sNumber).*(\d{10})
Python 片段:
import re
first_string = """PO Number Dept.number
4000813852 7"""
second_string = """Invoice Number PO Number Dept.number
123456666 4000813853 7"""
PO_first = re.search(r'(PO\sNumber).*(\d{10})',first_string,re.DOTALL)
print(PO_first.group(1)+" "+PO_first.group(2))
PO_second = re.search(r'(PO\sNumber).*(\d{10})',second_string,re.DOTALL)
print(PO_second.group(1)+" "+PO_second.group(2))
输出:
PO Number 4000813852
PO Number 4000813853
使用一个正则表达式:
data="""PO Number Dept.number
4000813852 7
Invoice Number PO Number Dept.number
123456666 4000813852 7
"""
re.findall(r"(PO Number)\s*Dept.number\s*(?:(?:\d+)\s+(\d+)|(\d+))\s+\d",data)
Out:
[('PO Number', '', '4000813852'), ('PO Number', '4000813852', '')]
我不使用 re.MULTILINE,因为 \s 也匹配换行符。