Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使regexp仅捕获内部组 var matches=Regex.matches(“abcde”和“(?:ab(c))(d)”).Cast().ToList();_C#_Regex - Fatal编程技术网

C# 如何使regexp仅捕获内部组 var matches=Regex.matches(“abcde”和“(?:ab(c))(d)”).Cast().ToList();

C# 如何使regexp仅捕获内部组 var matches=Regex.matches(“abcde”和“(?:ab(c))(d)”).Cast().ToList();,c#,regex,C#,Regex,在本场景中,将显示“c”和“d”匹配。 但是.Net会说有一个组'abcd'有一个捕获'abcd' 如何将.net的正则表达式设置为忽略未捕获的组,但返回内部组捕获。 (最好让它成为一个允许嵌套的解决方案,因为我是从对象的树结构递归创建正则表达式的) 谢谢。匹配对象包含组,您需要使用Match.Groups,而不是Captures来获取捕获的文本。见: 由于单个匹配可能涉及多个捕获组,match具有返回属性的属性。Match实例本身相当于集合中的第一个对象,位于Match.Groups[0](M

在本场景中,将显示“c”和“d”匹配。 但是.Net会说有一个组'abcd'有一个捕获'abcd'

如何将.net的正则表达式设置为忽略未捕获的组,但返回内部组捕获。 (最好让它成为一个允许嵌套的解决方案,因为我是从对象的树结构递归创建正则表达式的)


谢谢。

匹配对象包含组,您需要使用
Match.Groups
,而不是Captures来获取捕获的文本。见:

由于单个匹配可能涉及多个捕获组,
match
具有返回属性的属性。
Match
实例本身相当于集合中的第一个对象,位于
Match.Groups[0]
Match.Groups(0)
,在Visual Basic中),它表示整个匹配

你的

使用命名捕获将使您能够通过以下方式访问它们:

var first_c= matches[0].Groups[1].Value;
var first_d= matches[0].Groups[2].Value;
var matches=Regex.matches(“abcde”),“(?:ab(?c))(?d)”).Cast().ToList();
var first_c=匹配[0]。组[“myc”]。值;
var first_d=匹配[0]。组[“myd”]。值;

看看这个答案,或者你可以在这里找到一些东西,谢谢我检查了它们,但是它们好像正好相反。当regex抓到他们的团队时,这些人很高兴。我的问题是匹配1[0]。捕获[0]。值捕获整个“abcd”内容。它应该只分别给我“c”和“d”。第一组(组0)总是指输入字符串。匹配的组从1开始。我总是使用命名组。它们不容易阅读,但在访问命名捕获时,我不必计算位置。示例:ab(?c)d
var matches = Regex.Matches("abcde", "(?:ab(c))(d)").Cast<Match>().ToList();
var first_c= matches[0].Groups[1].Value;
var first_d= matches[0].Groups[2].Value;
var matches = Regex.Matches("abcde", "(?:ab(?<myc>c))(?<myd>d)").Cast<Match>().ToList();
var first_c= matches[0].Groups["myc"].Value;
var first_d= matches[0].Groups["myd"].Value;