我有以下类型的数据
Apple:Red
Kiwi:brown,Box:no
Grapes:"Black,Green",Box:yes,qty:55
我创建了这个正则表达式,
(.*):(.*)(?:(,)?),(Box):(.*),(qty):(.*)
但问题是这只匹配第3行。 第一行有一组数据,第二行有一个逗号,第三行有两个逗号。换句话说,我有3组数据,我需要捕获组中的所有键和值。如何在每个逗号之后创建部分是可选的,以便我可以匹配所有3行?
答案 0 :(得分:2)
([^:\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