首页 > 解决方案 > 美元金额,千位以逗号分隔

问题描述

我是 python 新手。我正在尝试使用正则表达式从子字符串中提取以美元计价的金额。它在大多数情况下都有效,但是我面临着一些我无法解决的问题。

结果金额是由于逗号而无法识别为金额的字符串。它也不适用于小于$1, 的少量(例如0.89)。没有领先$。任何帮助是极大的赞赏。

这是我所拥有的:

df['Amount']=df['description'].str.extract('(\d{1,3}?(\,\d{3})*\.\d{2})')

这是一个应该被解析的字符串:

000000000463 NYC DOF OPA CONCENTRATION ACCT. *00029265 07/01/2013 AP5378 1,107,844.38 Ven000000000463 Vch:00029265

我正在尝试1,107,844.38在数据框对象的单独列中提取金额。我没有任何应该被拒绝的字符串。

标签: pythonregexcurrency

解决方案


您可以尝试使用正则表达式

rx = r"\b(?<!/)(\d{1,3}(?:,\d{3})*(?:\.\d{2})?)\b(?!/)"
df['Amount']=df['description'].str.extract(rx)

查看正则表达式演示

细节

  • \b- 单词边界
  • (?<!/)-/在当前位置的左边没有(避免匹配日期时间值)
  • \d{1,3}- 1 到 3 位数字
  • (?:,\d{3})*- 0+重复,和3位数字
  • (?:\.\d{2})?- 一个可选的.和 2 位数字
  • \b- 单词边界
  • (?!/)-/当前位置右侧没有(避免匹配日期时间值)

推荐阅读