我有一个由逗号分隔的值列表,如下所示:
bDestruction =真,bEmissionAlarme =假,bActionReinit =假,sNatureData =“苏尔 évènementprovenantd'ALIS ou SGP - Lignes BJ,IJ ou GMO”,sCodeMsgExpliControle = “MSG-G00033_P_ALIM_ME”
我想捕获参数和值,所以我做了这个正则表达式:
(?:([^=]*))="?([^,]*)(?:"|,)?
但是因为它在大多数情况下都有效,所以他没有提供示例,因为sNatureData之后的文本包含逗号。因此正则表达式认为它是一对{parameter = value}的结束并抛出错误。
可以做些什么? 提前谢谢。
答案 0 :(得分:1)
我建议您按照评论中给出的建议,而不要使用正则表达式。
但是,如果您确实需要使用正则表达式执行此操作,则以下操作应该可以解决问题:
(.*?)=("?)([^"]+?)\2(?:,|$)
(.*?)=
捕获=
符号左侧的键。它只捕获一个密钥,因为?
使其匹配尽可能少的字符。("?)
捕获值是否在引号中。([^"]+?)\2(?:,|$)
([^"]+?)
捕获超过1个不是"
但尽可能少的字符。\2(?:,|$)
如果有引号并且它再次找到一个引号,或者在下一个逗号或字符串已完成时停止。