簡體   English   中英

在文本中搜索部分字符串並從匹配模式上方和下方的行中提取數字

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM