正则表达式可选组匹配可选数据的不同部分

时间:2018-03-08 17:14:08

标签: regex

我有以下类型的数据

Apple:Red
Kiwi:brown,Box:no
Grapes:"Black,Green",Box:yes,qty:55

我创建了这个正则表达式,

(.*):(.*)(?:(,)?),(Box):(.*),(qty):(.*)

但问题是这只匹配第3行。 第一行有一组数据,第二行有一个逗号,第三行有两个逗号。换句话说,我有3组数据,我需要捕获组中的所有键和值。如何在每个逗号之后创建部分是可选的,以便我可以匹配所有3行?

1 个答案:

答案 0 :(得分:2)

See regex in use here

([^:\n]*):("[^"]*"|[^,\n]*)(?:,Box:([^,\n]+)(?:,qty:(\d+))?)?
  • ([^:\n]*)将除:\n以外的任何字符捕获到捕获组1
  • :按字面意思匹配
  • ("[^"]*"|[^,\n]*)将以下任一项捕获到捕获组2中
    • "[^"]*"匹配",然后匹配除"以外的任何字符,然后"
    • [^,\n]*多次匹配,\n以外的任何字符
  • (?:,Box:([^,\n]+)(?:,qty:(\d+))?)?可选择匹配以下内容
    • ,Box:按字面意思匹配
    • ([^,\n]+)将除,\n之外的任何字符一次或多次捕获到捕获组3中
    • (?:,qty:(\d+))?可选择匹配以下内容
      • ,qty:按字面意思匹配
      • (\d+)将一个或多个数字捕获到捕获组4

结果如下:

Apple
Red

Kiwi
brown
no

Grapes
"Black,Green"
yes
55