正则表达式中的逗号分隔值

时间:2020-01-02 22:23:27

标签: regex

我正在尝试构建一个与以下逗号分隔值匹配的正则表达式:

Pattern: A,A,A
Where A contains only digits or digits separated by "|" 
e.g. A = 111 or A = 111|222

有效字符串可能是

111,222|333,444
or
111|222,333,444

还有我的正则表达式

^[[,]?[[\d]*|[\d]*\|[\d]*]]*$

但是,当我对其进行测试时,它针对以下模式返回了真

111,222|333,
111,222,333|
,111,222,333|444
|111,222|333,444

对于那些以“ |”开头的字符串,我该如何修改我的正则表达式以返回false或“,”并以“ |”结尾或“,”

1 个答案:

答案 0 :(得分:2)

您可以使用带有可选组的重复模式来匹配|和1个或多个数字:

^(?:\d+(?:\|\d+)?,)+\d+(?:\|\d+)?$

那会匹配

  • ^字符串的开头
  • (?:非捕获组
    • \d+匹配1个以上的数字
    • (?:\|\d+)?,(可选)匹配|和1+位数字,后跟,
  • )+关闭非捕获组并重复1次以上(或*重复0次以上)
  • \d+(?:\|\d+)?匹配1个以上的数字,还可以匹配|和1个以上的数字
  • $字符串结尾

Regex demo

请注意,您可以省略\d和逗号周围的括号。


如果可以有多个|,则可以使用ctwheels建议的模式:

 ^(?:\d+(?:\|\d+)*,)+\d+(?:\|\d+)*$

Regex demo