【发布时间】:2021-08-23 02:37:40
【问题描述】:
我很难找到一个很好的资源来解释如何在 C# 中使用命名捕获组。这是我到目前为止的代码:
string page = Encoding.ASCII.GetString(bytePage);
Regex qariRegex = new Regex("<td><a href=\"(?<link>.*?)\">(?<name>.*?)</a></td>");
MatchCollection mc = qariRegex.Matches(page);
CaptureCollection cc = mc[0].Captures;
MessageBox.Show(cc[0].ToString());
但是这总是只显示整行:
<td><a href="/path/to/file">Name of File</a></td>
我已经尝试过在各种网站上找到的其他几种“方法”,但我一直得到相同的结果。
如何访问在我的正则表达式中指定的命名捕获组?
【问题讨论】:
-
反向引用的格式应该是 (?.*) 而不是 (?.*?)
-
仅供参考:如果您尝试将命名的捕获组存储在 xml 文件中,那么
<>会破坏它。在这种情况下,您可以改用(?'link'.*)。与这个问题不完全相关,但我从谷歌搜索“.net named capture groups”来到这里,所以我相信其他人也是如此...... -
StackOverflow 链接有很好的例子:stackoverflow.com/a/1381163/463206 另外,@rtpHarry,不,
<>不会破坏它。我能够使用myRegex.GetGroupNames()集合作为 XML 元素名称。