【问题标题】:How do I write regular expression for array of decimal values?如何为十进制值数组编写正则表达式?
【发布时间】:2018-04-30 18:16:28
【问题描述】:

我有以下十进制值数组,您能帮我编写正则表达式来验证它们吗?

[456, 789]
[456.24, 789.24]
[456.24]

正如您在上面的 3 个示例中看到的,数组内容每次都会有所不同,其中的值有时会显示为小数位,有时会显示为整数,有时数组将只有一个值。此外,我的正则表达式应该验证小数点前的字符是否最少为 3 位,最多为 5 位。

我写了一个正则表达式 -

^\[(\d{3,5}\.)?\d+,\s(\d{3,5}\.)?\d+\]$

适用于数组[456.24, 78],但不适用于[456.24]

您能帮我改正我写的正则表达式吗?

【问题讨论】:

    标签: regex


    【解决方案1】:

    为留白加空格,就是这个

    \[\s*\d{3,5}(?:\.\d*)?(?:\s*,\s*\d{3,5}(?:\.\d*)?)*\s*\]

    可读

     \[
     \s* 
     \d{3,5} 
     (?: \. \d* )?
     (?:
          \s* , \s* 
          \d{3,5} 
          (?: \. \d* )?
     )*
     \s* 
     \]
    

    【讨论】:

      【解决方案2】:

      你不应该依赖一个恒定数量的值,你应该放一个量词:

      ^\[\d+(?:\.\d+)?(?:,\s*\d+(?:\.\d+)?)*\]$
      

      Live demo

      细分:

      • ^\[ 匹配输入开始,然后立即匹配 [
      • \d+ 匹配任意位数
      • (?:\.\d+)? 匹配可选的小数部分
      • (?: 非捕获组#2 的开始
        • ,\s* 匹配可选空格前的逗号
        • \d+(?:\.\d+)?匹配一个数字,和之前一样
      • )* 尽可能多地重复或零次
      • \]$ 匹配 ] 和字符串结尾

      【讨论】:

        【解决方案3】:

        使用split 可以让事情变得更容易。

        (?:[[\]]|,\s*)
        

        这在方括号或逗号上拆分,后跟一个可选的?空间并返回一个数组,如

        [0] => 
        [1] => 456.24
        [2] => 789.24
        [3] => 
        

        注意:第一个和最后一个元素是空的,因为我们也在方括号上拆分。
        如果您不喜欢这样,您可以先修剪/删除括号或使用另一个正则表达式来选择两个方括号之间的所有内容,例如\[([^\][]*?)\](这里在群里\1

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多