关于c#:在RegEx中提取组和子组

Extracting Groups and Sub-groups in RegEx

从某种意义上说,这个问题是我先前回答的问题的继续:获得" Unterminated [] set"。 C#

中的错误

我在C#中使用正则表达式提取URL:

1
Regex find = new Regex(@"(?<First>[,""]url=)(?<Url>[^\\\\]+)(?<Last>\\\\u00)");

其中文本包含以下格式的URL:

,url = http://domain.com?itag = 25 \\\\ u0026,url = http://hello.com?itag = 11 \\\\ u0026

我将整个URL放在" URL"组中,但我也想将itag值放在单独的" iTag"组中。我知道这可以使用小组来完成,我一直在尝试,但无法确切地知道如何做到这一点。


您已经在正则表达式中定义了命名组。语法?<First>命名括号中的所有内容First

使用Regex进行匹配时,使用Groups属性访问GroupCollection并按名称提取组值。

1
var first = regex.Match(line).Groups["First"].Value;

这将为iTag添加一个附加组,但保留完整的网址。将其移到另一个括号之外即可更改此内容。

1
(?<First>[,""]url=)(?<Url>[^\\?]+?itag=(?<iTag>[0-9]*))(?<Last>\\\\u0026)

这是代码。

1
2
3
4
5
6
7
8
9
10
11
Regex regex = new Regex("(?<First>[,"]url=)(?<Url>[^\\\\?]*\\\\?itag=(?<iTag>[0-9]*))(?<Last>\\\\u0026)");
string input ="
,url=http://domain.com?itag=25\\u0026,url=http://hello.com?itag=11\\u0026";

foreach(Match match in regex.Matches(input))
{
    System.Console.WriteLine("1."+match);
    System.Console.WriteLine("  1."+match.Groups["First"]);
    System.Console.WriteLine("  2."+match.Groups["Url"]);
    System.Console.WriteLine("  3."+match.Groups["iTag"]);
    System.Console.WriteLine("  4."+match.Groups["Last"]);
}

结果:

1
2
3
4
5
6
7
8
9
10
1. ,url=http://domain.com?itag=25&
  1. ,url=
  2. http://domain.com?itag=25
  3. 25
  4. &
1. ,url=http://hello.com?itag=11&
  1. ,url=
  2. http://hello.com?itag=11
  3. 11
  4. &