如何从换行符中提取文本,然后在Python中提取一些特定的关键字?

时间:2019-06-03 10:53:16

标签: 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               23599499
874646553       Open      6223.50               94744663

Thanks,

我的任务是提取发票编号,在这种情况下为646464646,645543333和874646553。在查看了几个示例之后,我知道它们通常在下一行,然后是标题,如“发票编号”或“发票编号等”。

我试图使用正则表达式解决此问题,但是我无法构建一个可以与标题中的“ Invoice#”之类的关键字匹配并提取该标题正下方的数字的解决方案(表快照中的N行数

此示例中我想要的输出是:

[646464646,645543333,874646553]

我尝试搜索任何现有的解决方案,但没有在换行符中找到匹配的示例,请提出建议,如果您有解决此问题的想法。

如果需要更多详细信息,请告诉我。谢谢。

编辑:上面显示的示例不是标准格式,这只是电子邮件中的一种,实际的电子邮件可能以不同的方式具有此快照,例如可能有超过4列具有不同的标题和名称,还有发票编号可以包含大于或小于9位的数字,我相信唯一一致的东西是标题中的“ Invoice#”关键字。

1 个答案:

答案 0 :(得分:1)

尝试首先在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])