给出以下字符串
[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)
答案 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
,您不希望与yesonce
或yesoncefunction
匹配。
答案 2 :(得分:0)
这应该有效:
edit\s*=\s*(yesonce|yes|no)