我目前有一個代碼可以作業,但唯一的缺陷是我沒有以最佳方式設定正則運算式 python 代碼。
原文包含數以十萬計的金額。沒有小數。我的意思是它有十進制但總是“,00”。
文本中的示例行:
債務 1 of 2,金額為:$ 58.610,00,未付
現在使用以下代碼捕獲數百萬罰款但少于 100,000 跳過一位數。
regex = r"(\d ).(\d ).(\d ),(\d )"
match = re.search(regex, line, re.MULTILINE)
print = "$" match.group(1) match.group(2) match.group(3)
它捕獲如下:
5860 美元
但是目標是這樣的:
58610 美元
如果金額以百萬計,它可以很好地捕獲,我必須這樣做,因為我正在使用它的貨幣有很大的數量。所以我經常管理這些數量。
問候
uj5u.com熱心網友回復:
您可以使用以下正則運算式來提取您預期的匹配項,然后洗掉千位分隔符:
\$\s?(\d{1,3}(?:\.\d{3}) )(?:,\d )?(?!\d)
您需要獲取 Group 1 值,從中洗掉句點并$在開始時重新附加。請參閱正則運算式演示。詳情:
\$- 一個$字符\s?- 一個可選的空格(\d{1,3}(?:\.\d{3}) )- 第 1 組:一到三個數字,然后出現一個或多個(因為您只想匹配數千個或更多).和三個數字(?:,\d )?- 逗號和一個或多個數字的可選序列(?!\d)- 右邊不允許有任何數字。
請參閱Python 演示:
import re
text = 'Debt 1 of 2 for an amount of: $ 58.610,00, Unpaid'
match = re.search(r'\$\s?(\d{1,3}(?:\.\d{3}) )(?:,\d )?(?!\d)', text)
if match:
print(f"${match.group(1).replace('.', '')}")
# => $58610
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/355943.html
上一篇:驗證字串是否與正則運算式匹配
