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

Regex-python:使用amount查找不同形式的货币,python,regex,currency,Python,Regex,Currency,我试图在收据上找到以欧元表示的金额。 我提取了这些值,但货币可以以不同的方式显示:“欧元”、“欧元”或“欧元”。我没有成功地在正则表达式中指定这些不同的形式。此外,“E”不能出现同样以“E”开头的单词,如“鸡蛋” 目前我的正则表达式是\d+[\.+\,+]\d*\s*[(e | eur | euro |€)]+\W,但括号不能正常工作,因为它检索包含e 我的目标是:如果我们找到形式AMENT+EUR或AMENT+EUR或AMENT+E,则找到金额 请参见以下示例: 谢谢这里发生了几件事。 首先,

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

目前我的正则表达式是
\d+[\.+\,+]\d*\s*[(e | eur | euro |€)]+\W
,但括号不能正常工作,因为它检索包含e

我的目标是:如果我们找到形式AMENT+EUR或AMENT+EUR或AMENT+E,则找到金额

请参见以下示例:


谢谢

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

我不确定我是否完全理解这个问题,但这是否有效:

  • \d+[,\d]*至少一个数字,可选后跟,或其他数字
  • \s |$空格或字符串结尾
  • ()(?:)捕获或 非捕获组
  • re.I不区分大小写

你的正则表达式非常混乱,我认为你应该看看这个网站上的例子。
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', '€')]