如何在 python 中使用正则表达式捕获带有千位和小数点分隔符的价格
How do I capture a price with thousand and decimal separator with regex in python
我目前有一个代码可以工作,但唯一的缺陷是我没有以最佳方式设置正则表达式 python 代码。
原文包含数额以千十万、百万为单位。没有小数。我的意思是它有小数点但总是“,00”。
文本中的示例行:
Debt 1 of 2 for an amount of: $ 58.610,00, Unpaid
现在使用以下代码可以很好地捕获数百万,但少于 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)
它是这样捕获的:
60
但是目标是这样的:
610
如果金额以百万为单位,它会很好地捕获,我必须这样做,因为我使用的货币数量很大。所以我经常管理这些数量。
此致
您可以使用以下正则表达式来提取您预期的匹配项,然后删除千位分隔符:
$\s?(\d{1,3}(?:\.\d{3})+)(?:,\d+)?(?!\d)
您需要获取第 1 组值,从中删除句点并在开头重新附加 $
。参见regex demo。 详情:
$
- 一个 $
字符
\s?
- 一个可选的空格
(\d{1,3}(?:\.\d{3})+)
- 第 1 组:一到三位数字,然后是 .
和三位数字 的一次或多次出现(因为您只想匹配数千和更多)
(?:,\d+)?
- 逗号和一个或多个数字的可选序列
(?!\d)
- 右边不允许有任何数字。
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('.', '')}")
# => 610
我目前有一个代码可以工作,但唯一的缺陷是我没有以最佳方式设置正则表达式 python 代码。
原文包含数额以千十万、百万为单位。没有小数。我的意思是它有小数点但总是“,00”。
文本中的示例行:
Debt 1 of 2 for an amount of: $ 58.610,00, Unpaid
现在使用以下代码可以很好地捕获数百万,但少于 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)
它是这样捕获的:
60
但是目标是这样的:
610
如果金额以百万为单位,它会很好地捕获,我必须这样做,因为我使用的货币数量很大。所以我经常管理这些数量。
此致
您可以使用以下正则表达式来提取您预期的匹配项,然后删除千位分隔符:
$\s?(\d{1,3}(?:\.\d{3})+)(?:,\d+)?(?!\d)
您需要获取第 1 组值,从中删除句点并在开头重新附加 $
。参见regex demo。 详情:
$
- 一个$
字符\s?
- 一个可选的空格(\d{1,3}(?:\.\d{3})+)
- 第 1 组:一到三位数字,然后是.
和三位数字 的一次或多次出现(因为您只想匹配数千和更多)
(?:,\d+)?
- 逗号和一个或多个数字的可选序列(?!\d)
- 右边不允许有任何数字。
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('.', '')}")
# => 610