如何为十进制值数组编写正则表达式?

时间:2018-04-30 18:16:29

标签: regex

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

[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]

请你帮我纠正我写过的正则表达式。

3 个答案:

答案 0 :(得分:1)

为余地添加空格,就是这个

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

可读

AppActivate "Microsoft Excel"

答案 1 :(得分:0)

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

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

Live demo

故障:

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

答案 2 :(得分:0)

使用split可以使事情变得更加轻松。

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

这会拆分方括号或逗号后跟可选项? space并返回一个类似

的数组
[0] => 
[1] => 456.24
[2] => 789.24
[3] => 

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