Extracting Groups and Sub-groups in RegEx
从某种意义上说,这个问题是我先前回答的问题的继续:获得" Unterminated [] set"。 C#
中的错误
我在C#中使用正则表达式提取URL:
1 |
其中文本包含以下格式的URL:
,url = http://domain.com?itag = 25 \\\\ u0026,url = http://hello.com?itag = 11 \\\\ u0026
我将整个URL放在" URL"组中,但我也想将itag值放在单独的" iTag"组中。我知道这可以使用小组来完成,我一直在尝试,但无法确切地知道如何做到这一点。
您已经在正则表达式中定义了命名组。语法
使用
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. & |