[英]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.