我认为我误解了小组如何在正则表达式和C#中工作。但是,我仍然想知道我想要的是否可能。
我们采取以下字符串
:::name(uploadFileName)
与表达式
匹配\A:::[a-zA-Z0-9_-]+\([a-zA-Z0-9_-]+\)
我希望能够轻松提取property = name
然后value = uploadFileName
之类的内容。
我认为这会发生在群组中,其中match.Groups[0].Value
为name
而match.Groups[1].Value
为uploadFileName
。根据群体的定义,我认为这是真的:
分组构造描述正则表达式的子表达式并捕获输入字符串的子字符串。
但是,match.Groups[0].Value
只是整个字符串:::name(uploadFileName)
答案 0 :(得分:5)
第0组是整场比赛。其他匹配从1开始。然而,你的正则表达式没有捕获任何东西,因为没有未转义的括号。如果您没有附带的括号组,可以使用以下内容。为简单起见,我建议在这里使用命名捕获:
\A:::(?<name>[a-zA-Z0-9_-]+)\((?<property>[a-zA-Z0-9_-]+)\)
然后,您的结果将在match.Groups["name"].Value
(=姓名)和match.Groups["property"].Value
(= uploadFileName)。
答案 1 :(得分:4)
第0个项是正则表达式匹配的整个字符串。之后的索引是每个捕获组的内容。因此,您需要两个捕获组:
\A:::([a-zA-Z0-9_-]+)\(([a-zA-Z0-9_-]+)\)
然后match.Groups[1].Value
将是name
而match.Groups[2].Value
将是uploadFileName
。请注意第二部分的双括号 - \(
和\)
匹配字面括号字符,而非转义符号则描述正则表达式的实际捕获组。