正则表达式 - 检查是否存在但不包括它

时间:2017-10-23 21:11:22

标签: regex

文本:

Name=Jennifer,Age=29,Height=1.70,Occupation=Actress...

正则表达式:

(?<Name>(?:Name=)\w+)?\,?(?<Age>(?:Age=)\d+)?\,?(?<Height>(?:Height=)[\d.]+)?\,?(?<Occupation>(?:Occupation=)\w+)?\,?

结果:

Full match  `Name=Jennifer,Age=29,Height=1.70,Occupation=Actress`
Group `Name`    `Name=Jennifer`
Group `Age` `Age=29`
Group `Height`  `Height=1.70`
Group `Occupation`  `Occupation=Actress`

如何使密钥不属于该组,但检查它们是否存在?

1 个答案:

答案 0 :(得分:1)

通常,使用仅包含可选模式的正则表达式是一个坏主意(因为您需要处理空匹配,模式只能以预定义的顺序匹配,并且不可能使其与正向前导一起使用因为所有都是可选的)。 使用Name=(\w+)Age=(\d+)之类的正则表达式提取所有必要的详细信息会更有意义。

如果您想要遵循您的路径,可以尝试通过将键放在捕获组之外来修复模式:

(?:Name=(?<Name>\w+))?,?(?:Age=(?<Age>\d+))?,?(?:Height=(?<Height>[\d.]+))?,?(?:Occupation=(?<Occupation>\w+))?,?

请参阅regex demo

enter image description here