![](/img/trans.png)
[英]How to search for a combination of keywords in a text-file, extract lines above and below, and then export to Excel using pandas
[英]Search for a partial string in text and extract numbers from lines above and below the matched pattern
我正在尝试编写一个正则表达式,它将根据字符串进行搜索,如果它找到了部分匹配项。 我可以从匹配字符串或 substring 上方和下方的行(2 行)中提取数字。
我的文字是:
Subtotal AED1,232.20
AED61.61
VAT
5 % Tax:
RECEIPT TOTAL: AED1.293.81
我希望搜索VAT
一词并从其上下两行中提取所有数字。
预期 output:
AED1,232.20
AED61.61
5 %
AED1.293.81
我可以提取全部内容,但我需要数字,可以删除或忽略 AED。
我的正则表达式是:
((.*\n){2}).*vat(.*\n.*\n.*)
提前致谢!
尝试这个:
(?:[a-zA-Z:]*([0-9,.]+)[a-zA-Z:]*)\n(?:[a-zA-Z:]*([0-9,.]+)[a-zA-Z:]*)\nVAT\n(?:[a-zA-Z:]*([0-9,.]+)[a-zA-Z:]*).*\n[^0-9]*(?:[a-zA-Z:]*([0-9,.]+)[a-zA-Z:]*)
这个正则表达式可能看起来太复杂或太长,但它有更好的控制并且只返回数字,这将是他的工作。
您可以在python
中使用此正则表达式:
((?:^.*\d.*\n){0,2})VAT((?:\n.*\d.*){0,2})
正则表达式详细信息:
((?:^.*\d.*\n){0,2})
:匹配 2 条必须包含至少一个数字的前导行VAT
:匹配文本VAT
((?:\n.*\d.*){0,2})
:匹配必须至少包含一个数字的 2 个尾随行此正则表达式是为您的输入文本和预期的 output 量身定制的:
r'.* (AED\d{1,3}(?:,\d{3})*\.\d{2})\n(AED\d{1,3}(?:,\d{3})*\.\d{2})\nVAT\n(\d{1,2} %) Tax:\n.* (AED\d{1,3}(?:,\d{3})*\.\d{2})'
它准确地输出您想要的文本,没有多余的单词。
它还适用于输入文本中的多个“增值税”。
(AED\d{1,3}(?:,\d{3})*\.\d{2})
匹配货币代码和金额(在一组中)(\d{1,2} %)
匹配增值税百分比。 支持 1 到 2 位数字。 您可以进一步增强它以支持小数点。请注意,货币金额的正确正则表达式(以逗号作为千位分隔符,正好有 2 个小数点)应如下所示:
r'\d{1,3}(?:,\d{3})*\.\d{2}'
[使用 (?: expr) 表示未标记的组,以便该子组不会被标记为与您的 re.findall function 调用匹配。]
如果您的输入支持“AED”以外的货币代码,您可以将“AED”替换为 [AZ]{3},因为货币代码通常应为 3 个字符的大写字母。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.