c#Regex匹配键值对

时间:2014-12-06 19:58:25

标签: c# regex

给出以下字符串

[ef:id =tellMeMore4, edit= yes, req=true,prompt = false]

我正在尝试匹配编辑键和值,其中值可以是yes,yesonce或no。

edit\s*=\s*(yes(once)?|no)

我回来了3组:

{edit= yes}
{yes}
{}

有没有办法匹配,满足我的要求,但没有可选once值的组?

我尝试了这个,但它在所有差异上都不匹配:

edit\s*=\s*(yes[once]?|no)

3 个答案:

答案 0 :(得分:2)

要指定您不需要捕获组,请使用名为非捕获组(?: ... )结构:

edit\s*=\s*(yes(?:once)?|no)

根据经验,除非您需要捕获,否则请始终使用(?: ... )构造而不是( ... )

另一种方法是使用命名组和RegexOptions.ExplicitCapture标志:

edit\s*=\s*(?<value>yes(once)?|no)

当然,您可以结合使用这两种方法,这样您就不需要标记,但可以保留命名捕获:

edit\s*=\s*(?<value>yes(?:once)?|no)

使用match.Groups["value"].Value提取值。

答案 1 :(得分:1)

试试这个:

edit\s*=\s*\b(yesonce|yes|no)\b

此外,您应该使用\b,因为如果字符串为yes,您不希望与yesonceyesoncefunction匹配。

答案 2 :(得分:0)

这应该有效:

 edit\s*=\s*(yesonce|yes|no)