正则表达式解析“a = 1,b = 2,c = 3,4,5,d = 6,e = x,y,z”

时间:2013-02-05 19:20:22

标签: c# regex

如何使用正则表达式来拆分(或匹配)此字符串:

a=1,b=2,c=3,4,5,d=6,e=x,y,z

基本格式为name=value,name=value,其中值可以包含逗号,名称始终为字母数字。

我试图最终:

a=1
b=2
c=3,4,5
d=6
e=x,y,z

我的第一个想法是语法含糊不清,因为值包含逗号,但我认为它应该可行,因为name不包含=

这是关闭的,但会将尾随逗号与每个值匹配,但与最终z不匹配:

(?<name>\w+)
\s*=\s*
(?<value>
\S
   (?:
      ,
      |
      .[^=]         
    )*
)

制作这些比赛:

a=1,
b=2,
c=3,4,5,  
d=6,
e=x,y,

这里有正则表达式向导吗?

3 个答案:

答案 0 :(得分:3)

您可以使用预见断言comma上分开,然后是alphabet,然后是=。您可以使用以下正则表达式进行拆分: -

",(?=[a-zA-Z0-9]=)");

答案 1 :(得分:0)

在与,|.[^=]的最终匹配中,.[^=]表示任何字符后面跟不是=的字符。但是,z后面没有任何内容。相反,你应该使它成为任何字符,然后不是=或字符串的结尾:

,
|
.(?:[^=]|$)

我已经确认这可以使用php的preg_match_all

答案 2 :(得分:0)

如果你的正则表达式引擎支持lookahead assertions,你可以试试这个:

(\w)=(\w(,\w(?!=))*)

注意:我使用\w缩短了时间。如果您只想匹配字母数字字符,请替换\w而不是[a-zA-Z0-9]

regexpal

上成功投放 编辑:被Rohit Jain击败