我正在解决一个问题,其中有一些表格式的电子邮件快照格式的多行字符串。
以下示例:
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#”关键字。
答案 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])