正则表达式

时间:2020-01-17 12:39:24

标签: regex regex-group

我正在尝试创建以abc开头的正则表达式,然后是空格,然后是2位数字,该数字不应该以0开头并且应小于33,然后在括号中应至少包含3个数字,逗号分隔,并且他们。之后,如果是逗号,则abc之后的正则表达式应重复。

例如:

  1. abc 23(340, 223, 243)
  2. abc 3(336,455,344,880,567), 32(323,344,464)

我尝试这样做:

  1. /^abc(\s((?!(0))\d{1,2}[(]([1-9][0-9]*[,]){2}([1-9][0-9]*[,]*)+[)])([,]*))+/g

  2. /^abc(\s((?!(0))\d{1,2}[(]([1-9][0-9]*[,]){2}(([1-9][0-9]*)[,]*)+[)])(([,]\s((?!(0))\d{1,2}[(]([1-9][0-9]*[,]){2}(([1-9][0-9]*)[,]*)+[)]))*))+/g

这些表达式不包括小于等于33的大小写,并且这些表达式也允许以下情况:

  1. abc 23(323,345,455),
  2. abc 23(323,345,455), 34()

不是必需的。

2 个答案:

答案 0 :(得分:1)

以下内容如何:

^abc\s(?:(?:[1-9]|[12][0-9]|3[0-3])\(\d+(?:,\s?\d+){2,}\))(?:,\s?(?:(?:[1-9]|[12][0-9]|3[0-3])\(\d+(?:,\s?\d+){2,}\)))*$

针对给定的4个示例进行了测试:https://regex101.com/r/pb8Ipv/2

如果要处理匹配的组,请将(?:替换为(

编辑

解决了与abc后面的单个数字匹配的问题

答案 1 :(得分:1)

您可以使用重复的非捕获组:

^abc (?:[1-9]|[12][0-9]|3[0-3])\([1-9][0-9]*(?:, ?[1-9][0-9]*){2,}\)(?:, (?:[1-9]|[12][0-9]|3[0-3])\([1-9][0-9]*(?:, ?[1-9][0-9]*){2,}\))*$
  • ^字符串的开头
  • abc 匹配abc和空格
  • (?:非捕获组
    • [1-9]|[12][0-9]|3[0-3]匹配数字1-33
  • )关闭群组
  • \(匹配(
  • [1-9][0-9]*匹配1-9的数字并重复0+ 0-9的数字
    • (?:, ?[1-9][0-9]*){2,}匹配逗号,可选空格并重复2次或更多次,以匹配至少3个数字
  • \)匹配)
  • (?:非捕获组
    • , 匹配逗号和空格
    • (?:[1-9]|[12][0-9]|3[0-3])\([1-9][0-9]*(?:, ?[1-9][0-9]*){2,}\)重复第一个图案
  • )*关闭组并重复0次以上
  • $字符串结尾

Regex demo