Regex-python:使用amount查找不同形式的货币
我试图在收据上找到以欧元表示的金额。 我提取了这些值,但货币可以以不同的方式显示:“欧元”、“欧元”或“欧元”。我没有成功地在正则表达式中指定这些不同的形式。此外,“E”不能出现同样以“E”开头的单词,如“鸡蛋” 目前我的正则表达式是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,则找到金额 请参见以下示例: 谢谢这里发生了几件事。 首先,
\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', '€')]