正则表达式匹配给定字符串中的数字,逗号,点,空格

时间:2020-10-18 10:54:47

标签: regex

我正在写一个正则表达式以匹配任何数字,逗号和点,除非它们位于数字的末尾。

这是到目前为止我所拥有的一个例子:

/([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)

我该如何使用正则表达式?

1 个答案:

答案 0 :(得分:2)

您可以使用模式来首先匹配数字,并可以选择匹配空格,逗号或点,然后再匹配1+数字,以使点逗号或空格不能在结尾。

\d+(?:[,. ]\d+)*
  • \d+匹配1个以上的数字
  • (?:非捕获组
    • [,. ]\d+匹配空格,.和1个以上的数字
  • )*关闭组并重复0次以上

Regex demo

可能会有更精确的匹配

\b\d{1,3}(?:[,. ]\d{3})*(?:[.,]\d{2})?\b

Regex demo