C# regex-仅当另一个命名组匹配时命名组
切换命令可按如下方式使用:C# regex-仅当另一个命名组匹配时命名组,c#,regex,regex-group,C#,Regex,Regex Group,切换命令可按如下方式使用: toggle toggle n toggle >hotspot y toggle >hotspot toggle @location>hotspot n toggle @location>hotspot 我目前的正则表达式如下: ^toggle(?>\s(?>@(?'location'\w+))?(?>>(?'hotspot'\w+))?)?(?>\s(?'value'n|y))?$ 但是,此选项允许以下字符串
toggle
toggle n
toggle >hotspot y
toggle >hotspot
toggle @location>hotspot n
toggle @location>hotspot
我目前的正则表达式如下:
^toggle(?>\s(?>@(?'location'\w+))?(?>>(?'hotspot'\w+))?)?(?>\s(?'value'n|y))?$
但是,此选项允许以下字符串匹配:
toggle @location
toggle @location n
仅当命名组“热点”(前缀“>”)匹配时,我才允许命名组“位置”(前缀“@”)。在您尝试的模式中,组
热点不应是可选的
还有一些原子组(?>
),如果您将分组更改一点,可以选择匹配空格字符,则不需要这些原子组
此部分n | y
也可以作为字符类[ny]
^toggle(?:\s(?:@(?'location'\w+))?>(?'hotspot'\w+))?(?:\s(?'value'[ny]))?$
解释
^
字符串的开头
切换
按字面匹配
(?:
非捕获组
\s
匹配空白字符
(?:@(?'location'\w+))
可选择匹配@
,在组位置中捕获1+字字符
(?'hotspot'\w+)
匹配>
,在组中捕获hotspot
1+字字符
)?
关闭组并将其设置为可选
(?:
非捕获组
\s(?'value'[ny])
匹配空白字符,在组值中捕获n
或y
)?
关闭组并将其设置为可选
$
字符串结尾
热点不应是可选的^切换(?>\s(?>@(?'location'\w+))(?>>(?'Hotspot'\w+))(?>\s(?'value'[ny]))?$
你说得对,它实际上非常简单!如果hotspot在值之后呢?我的意思是,只有前缀+命名组匹配时,有没有一种通用的方法允许组?在这种情况下,你可以使用肯定的前瞻断言来确保字符串至少包含你需要的内容。然后你可以让其他组我认为这是一个很好的例子,如果你真的需要正则表达式的话。