我尝试在收据中找到欧元金额。 我提取了值,但是货币可以以不同的方式出现:“ EUR”,“ E”或“€”。我未能在正则表达式中指定这些不同的形式。另外,“ E”不得引发也以“ E”开头的单词,例如“ Eggs”。
当前我的正则表达式为\d+[\.+\,+]\d*\s*[(e|eur|euros|€)]+\W
,但方括号无法正常工作,因为它会检索包含E ...的所有单词。
我的目标:如果我们找到金额+欧元或金额+欧元或金额+ E的表格,请找到金额
请参见示例:https://regex101.com/r/F3Zm9M/2
谢谢
答案 0 :(得分:0)
这里发生了几件事。
首先,您没有捕获我想捕获的内容(您说的是值)。您应该具有类似(\d+(?:.|,)\d\d)
的名称(内括号内的?:将。和分组,而不必使其成为另一个捕获组)。
其次,您的[(e | eur | euros |€)]根本没有执行您想要的操作-查看您链接的regex101侧面板上的解释。相反,您想要的只是e|eur|euros|€
。同样,为了对它们进行分组并使|
像您想要的那样工作,请将它们分组,并且我假设您不想捕获这些符号,因此请使用(?:e|eur|euros|€)
。您可能需要考虑添加空格以确保'e'或'eur'不在单词中,尽管那样您可能不匹配'EUR3000'之类的东西。
总体而言,我不确定您要匹配的内容是什么,但我希望这可以帮助您入门。
答案 1 :(得分:0)
我不确定我是否完全理解该问题,但是可以这样做:https://regex101.com/r/wRJeeS/1吗?
答案 2 :(得分:0)
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', '€')]