我需要一个正则表达式,它匹配任何数字,后跟一个字符串,字符串由数字、空格、点和逗号组成,后跟“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))
请参见regex(second regex demo)和Python demo。
图案细节
c
-一个数字\u010D
-可选出现\d
-零个或多个数字、空格、(?:[., \d]*\d)?
或[., \d]*
.
-一个数字,
-0个或更多空白\d
-要么\s*
后跟(?:K(?:c\u030C|\u010D)|Eur)
或K
或c\u030C
值。定义货币正则表达式时,请使用
\u010D
或Eur
。