在某种程度上,这个问题是我之前回答的问题的延续:获取“未终止 [] 设置”。C# 中的错误
我在 C# 中使用正则表达式来提取 URL:
Regex find = new Regex(@"(?<First>[,""]url=)(?<Url>[^\\]+)(?<Last>\\u00)");
Run Code Online (Sandbox Code Playgroud)
其中文本包含以下格式的 URL:
,url= http://domain.com?itag=25 \u0026,url= http://hello.com?itag=11 \u0026
我在“Url”组中获取整个 URL,但我还希望在单独的“iTag”组中拥有 itag 值。我知道这可以使用子组来完成,我一直在尝试,但无法弄清楚如何做到这一点。
您已经在 Regex 中定义了命名组。语法?<First>是在这些括号内命名所有内容First。
当您匹配 using 时Regex,使用该Groups属性访问GroupCollection并按名称提取组值。
var first = regex.Match(line).Groups["First"].Value;
Run Code Online (Sandbox Code Playgroud)
这将为 iTag 添加一个额外的组,但保留完整的 Url。将它移到另一个括号之外以改变这一点。
(?<First>[,""]url=)(?<Url>[^\?]+?itag=(?<iTag>[0-9]*))(?<Last>\\u0026)
Run Code Online (Sandbox Code Playgroud)
这是代码。
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"]);
}
Run Code Online (Sandbox Code Playgroud)
结果:
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. &
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6605 次 |
| 最近记录: |