Regex 在Python中,如何从紧跟某些特定关键字的换行符中提取文本?

Regex 在Python中,如何从紧跟某些特定关键字的换行符中提取文本?,regex,python-3.x,Regex,Python 3.x,我正在处理一个问题,我有一些多行字符串,它们是表类型的电子邮件快照格式 示例如下: Hello, please provide an update on the following invoice Invoice# Status Invoice_Amount Account# 646464646 Open 7446.00 53334444 645543333 Open 6443.00

我正在处理一个问题,我有一些多行字符串,它们是表类型的电子邮件快照格式

示例如下:

Hello,

please provide an update on the following invoice

Invoice#        Status    Invoice_Amount        Account#
646464646       Open      7446.00               53334444
645543333       Open      6443.00               23599499
874646553       Open      6223.50               94744663

Thanks,
我的任务是提取发票号,在本例中是646645543333和874646553。看了几个例子后,我知道它们通常在下一行,后面跟着一个标题,如发票号或发票号码等

我试图使用正则表达式来解决这个问题,但我无法构建一个解决方案来匹配标题中的关键字,如“Invoice#”,并在标题下方提取数字(表快照中可能有N行)

我希望本例的输出为:

[646464646,645543333,874646553]
我试图搜索任何现有的解决方案,但在换行符文本中没有找到任何匹配的示例,请建议您是否知道如何解决此问题

如果需要进一步的细节,请告诉我。谢谢


编辑:上面显示的示例不是标准格式,这只是其中一封电子邮件,实际的电子邮件可能会以不同的方式显示此快照,比如可能有4列以上的标题和名称不同,发票编号可能多于或少于9位,我认为唯一一致的是“发票#”标题中的关键字。

首先尝试在
Invoice#
上拆分输入字符串/文件,然后在列表中的第二个条目上使用
re.findall

parts = input.split("Invoice#")
numbers = re.findall(r'(\d+)       (?:Open|Closed)', parts[1])
如果您确定所有发票编号始终为9位数字,则可以简化匹配逻辑:

numbers = re.findall(r'\d{9}', parts[1])

谢谢你的建议,但这只是其中一个例子,不同的发件人以自己的格式发送电子邮件,而且发票号码不是固定的9位数字,唯一可能的方法是查看“发票”#一词下方的文本。我的建议应该适用于你实际向我们展示的格式。如果你有其他可能改变解决方案的例子,那么你应该在问题中暗示这一点。是的,在这种情况下你是对的,但电子邮件中唯一一致的文本是“发票#”。有多个发件人具有自己的格式,因此唯一可能的解决方案是提取“发票”文本下方的文本。如前所述,这仅适用于给定示例,但不适用于所有示例。
但电子邮件中唯一一致的文本是“发票”
。。。那么,为什么我的方法不适用于你所有的电子邮件呢?你问了一个非常模糊的问题。请向我们展示所有电子邮件格式,或为我们提供如何识别发票号的规则。