Regex python:使用amoun查找不同形式的货币

2024-04-23 14:55:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着在收据上找到以欧元表示的金额。 我提取了值,但是货币可以以不同的方式出现:“EUR”、“E”或“€”。我没有成功地在正则表达式中指定这些不同的形式。此外,“E”不能出现同样以“E”开头的词,如“Eggs”。你知道吗

当前我的正则表达式是\d+[\.+\,+]\d*\s*[(e|eur|euros|€)]+\W,但括号不能正常工作,因为它检索所有包含E。。。你知道吗

我的目标是:如果我们找到amount+EUR或amount+EUR或amount+E,那么就找到金额

这里有一个例子:https://regex101.com/r/F3Zm9M/2

谢谢


Tags: https目标方式货币eur金额amounteggs
3条回答
r=r"(\d+[\.,\d]*)\s*(e|eur|euros|€|euro)(?:\s|$)"

s=" 123,456.47 E 123,456.47 Euro 123,456.47 137€ 138 € 139 euro 123,456.47€"

re.findall(r,s,flags=re.I)
Out: 
[('123,456.47', 'E'),
 ('123,456.47', 'Euro'),
 ('137', '€'),
 ('138', '€'),
 ('139', 'euro'),
 ('123,456.47', '€')]
  • \d+[,\d]*至少一个数字,可选后跟。,或其他数字
  • \s |$空格或字符串结尾
  • ()(?:)捕获或 非捕获组
  • re.I不区分大小写

这里发生了几件事。 首先,你没有捕捉到我认为你想要捕捉的东西(你说的是价值观)。你应该有(\d+(?:.|,)\d\d)(the?:在组的内圆括号内。而且,不让它成为另一个捕获组)。 第二,您的[(e | eur | euro | eur |€]]根本没有做您希望它做的事情-看看您链接的regex101侧面板上的解释。你想要的只是e|eur|euros|€。同样,为了对这些符号进行分组并使|按您所希望的方式工作,您可以对它们进行分组,我假设您不想捕获这些符号,所以请使用(?:e|eur|euros|€)。您可能需要考虑添加空格,以确保“e”或“eur”不在单词中,尽管这样您可能无法匹配“EUR3000”之类的内容。 总的来说,我不完全确定你想要匹配什么,但我希望这能帮助你开始。你知道吗

我不确定我是否完全理解了这个问题,但这是否有效:https://regex101.com/r/wRJeeS/1?你知道吗

相关问题 更多 >