我正在写一个正则表达式以匹配任何数字,逗号和点,除非它们位于数字的末尾。
这是到目前为止我所拥有的一个例子:
/([0-9]+[., ]*)+/
这已经非常好了,因为它与我想要的匹配。唯一的问题是它匹配''或',''。在表达式的末尾。
假设我有这个字符串:
The cost of the food was 1 999,49 € without drinks.
我要匹配1 999,49
字符串。现在,我的正则表达式与1 999,49
相匹配。如果价格格式不同,也会发生相同的情况:
1,999.49 $ => 1,999.49 (with no whitespace or anything in the end)
我该如何使用正则表达式?
答案 0 :(得分:2)
您可以使用模式来首先匹配数字,并可以选择匹配空格,逗号或点,然后再匹配1+数字,以使点逗号或空格不能在结尾。
\d+(?:[,. ]\d+)*
\d+
匹配1个以上的数字(?:
非捕获组
[,. ]\d+
匹配空格,
或.
和1个以上的数字)*
关闭组并重复0次以上可能会有更精确的匹配
\b\d{1,3}(?:[,. ]\d{3})*(?:[.,]\d{2})?\b