【问题标题】:Regex to match numbers, commas, dots, spaces in a given string正则表达式匹配给定字符串中的数字、逗号、点、空格
【发布时间】:2020-10-18 10:54:47
【问题描述】:

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

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

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

如何使用正则表达式做到这一点?

【问题讨论】:

    标签: regex


    【解决方案1】:

    您可以使用模式首先匹配数字,然后可以选择匹配空格、逗号或点后跟 1+ 数字,以便点逗号或空格不能位于末尾。

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

    Regex demo

    更精确的匹配可能是

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

    Regex demo

    【讨论】:

    • 谢谢你,第一个似乎工作得很好。如果我想让. 出现在末尾但不想要逗号或空格,我该怎么办?这看起来好吗? \d+(?:[, ]\d+)*([.])*
    • @Radical_Activity 然后你可以考虑像\b\d{1,3}(?:[,. ]\d{3})*(?:\.\d{2})?\b这样的模式
    • 谢谢。第一个公式可以做到吗? \d+(?:[,. ]\d+)*
    • @Radical_Activity 只匹配数字或末尾有逗号和点的部分\d+(?:(?:[, ]\d+)+(?:\.\d+))?regex101.com/r/vTbjLu/1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多