我需要一个正则表达式,它匹配任何数字,后跟一个字符串,字符串由数字、空格、点和逗号组成,后跟“k_”或“eur”。
问题是我的regex有时找不到所有这样的字符串。

((\d[., \d]+)(Kč|Eur))

例如:
re.findall("""((\d[., \d]+)(Kč|Eur))""","Letenky od 12 932 Kč",flags=re.IGNORECASE)

不返回任何内容而不是[(12 932 Kč,12 932,Kč)]
你知道regex有什么问题吗?

最佳答案

输入字符串包含一个多字节字母,由一个基音字母和一个变音符号组成,regex包含一个带unicode码位的预合成字母。
你可以用

(\d(?:[., \d]*\d)?)\s*(K(?:c\u030C|\u010D)|Eur)

或者
(\d[., \d]*)\s*(K(?:č|č)|Eur))

请参见regexsecond regex demo)和Python demo
图案细节
c-一个数字
\u010D-可选出现
\d-零个或多个数字、空格、(?:[., \d]*\d)?[., \d]*
.-一个数字
,-0个或更多空白
\d-要么\s*后跟(?:K(?:c\u030C|\u010D)|Eur)Kc\u030C值。
定义货币正则表达式时,请使用\u010DEur

10-06 07:17