我有以下十进制值数组,您可以帮我编写正则表达式来验证它们吗?
[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]
请你帮我纠正我写过的正则表达式。
答案 0 :(得分:1)
为余地添加空格,就是这个
\[
\s*
\d{3,5}
(?: \. \d* )?
(?:
\s* , \s*
\d{3,5}
(?: \. \d* )?
)*
\s*
\]
可读
AppActivate "Microsoft Excel"
答案 1 :(得分:0)
你不应该依赖于恒定数量的值,你应该放一个量词:
^\[\d+(?:\.\d+)?(?:,\s*\d+(?:\.\d+)?)*\]$
故障:
^\[
匹配输入的开头,然后立即匹配[
\d+
匹配任意位数(?:\.\d+)?
匹配可选的小数部分(?:
开始非捕获组#2
,\s*
匹配可选空格前的逗号\d+(?:\.\d+)?
匹配一个与之前相同的号码)*
重复尽可能多或零时间\]$
匹配]
和字符串结尾答案 2 :(得分:0)
使用split
可以使事情变得更加轻松。
(?:[[\]]|,\s*)
这会拆分方括号或逗号后跟可选项? space并返回一个类似
的数组[0] =>
[1] => 456.24
[2] => 789.24
[3] =>
注意:第一个和最后一个元素是空的,因为我们也在方括号上分开
如果您不喜欢这样,您可以先简单地修剪/删除括号,或使用另一个正则表达式来选择两个方括号之间的所有内容,例如: \[([^\][]*?)\]
(此处为小组\1
)