在某种程度上,这个问题延续了我之前回答的问题:Getting "Unterminated [] set." Error in C#
我在C#中使用正则表达式来提取URL:
Regex find = new Regex(@"(?<First>[,""]url=)(?<Url>[^\\]+)(?<Last>\\u00)");
文本包含以下格式的网址:
,URL = http://domain.com?itag=25 \ u0026,URL = http://hello.com?itag=11 \ u0026
我在'Url'组中获取整个网址,但我也希望在单独的“iTag”组中获得itag值。我知道这可以使用子组完成,我一直在尝试,但无法弄清楚到底是怎么做的。
答案 0 :(得分:4)
您已在Regex中定义了命名组。语法?<First>
正在命名括号First
中的所有内容。
使用Regex
进行匹配时,使用Groups
属性访问GroupCollection
并按名称提取组值。
var first = regex.Match(line).Groups["First"].Value;
这将为iTag添加一个额外的组,但保留完整的Url。将其移到另一个括号之外以改变它。
(?<First>[,""]url=)(?<Url>[^\?]+?itag=(?<iTag>[0-9]*))(?<Last>\\u0026)
这是代码。
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. ,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. &