提取金额 + 前缀 / 后缀表示 python 中的货币价值



我正在尝试从文本中提取这些内容:

  1. 货币格式的金额 + 前缀/后缀
  2. 任何其他数值

货币格式可以用各种组合和不同的货币表示,即美元、美元、美元、欧元等。

例:

text = 'usd$4540.34, some text, usd $1234.34, $123.98, $234, $ 123, USD$1621.09, usd109, 123usd, 8888, some other text, foo, bar'

到目前为止,我有以下代码:

re.sub(r"[^(w{1,})?$?d.*.?d*$]|[^0-9$+.,s']", '', text, flags=re.I).strip(',')

但它返回的结果是:

'$4540.34,,$1234.34,$123.98,$234,$123,$1621.09,109,123,8888'

根据上面的示例,正则表达式应返回以下预期输出

usd$4540.34, usd $1234.34, $123.98, $234, $ 123, USD$1621.09, usd109, 123usd, 8888

如果有人可以帮助我,请不胜感激。谢谢!

您可以使用以下正则表达式来实现您的目的:

^(?:(?:[a-z]{0,} ?$? *)d+(?:.d+)?)$|^(?:d+(?:.d+)?[a-z]{1,})$

上述正则表达式的解释:

^, $- 分别表示字符串的开始和结束。

?:- 表示非捕获组

(?:[a-z]* ?$? *)- 表示开头包含$ 和 USD(根据您的示例(的情况。它可以在它们之间或数值开始之前包含零个或多个空格。您还需要在此处编辑正则表达式,以便添加其他货币符号,如 ₹、€ 等。

d+- 匹配数字 1 次或更多次。

(?:.d+)?- 与小数部分 0 或 1 时间匹配的非捕获组。

|- 表示交替

(?:d+(?:.d+)?[a-z]{1,})- 一个非捕获组,用于匹配货币跟随数字的情况。(123美元,如你的情况(。

您可以在此处找到上述正则表达式的演示。

在 python 中的实现:

import re
regex =  r"^(?:(?:[a-z]{0,} ?$? *)d+(?:.d+)?)$|^(?:d+(?:.d+)?[a-z]{1,})$"
text = 'usd$4540.34, some text, usd $1234.34, $123.98, $234.32.2, $ 123, USD$1621.09, usd109, 123usd, 8888, some other text, foo, bar, 998.90'
text = text.replace(', ', 'n')
print(re.findall(regex, text, flags=re.I | re.M))

可以在此处找到示例运行不过,您可以根据需要操作代码。

这直接给出为列表:

pattern = r'((?:[a-z]+ ?)?(?:[$] *)?d+(?:.d+)?[a-z]*)'
text = 'usd$4540.34, some text, usd $1234.34, $123.98, $234, $ 123, USD$1621.09, usd109, 123usd, 8888, some other text, foo, bar'
re.findall(pattern, text, flags=re.I)

相关内容

  • 没有找到相关文章

最新更新