如何从.NET RegEx中提取子字符串?

And*_*ant 37 .net c# regex

我有一个包含一个(或多个)键/值对的XML文件.对于这些对中的每一对,我想提取一个两字节十六进制值的值.

所以XML包含这个片段:

<key>LibID</key><val>A67A</val>
Run Code Online (Sandbox Code Playgroud)

我可以使用以下表达式匹配,括号中的ID.

Match match = Regex.Match(content, @"<key>LibID</key><val>([a-fA-F0-9]{4})</val>");

if (match.Success)
{
  Console.WriteLine("Found Match for {0}\n", match.Value);
  Console.WriteLine("ID was {0}\n", "Help me SO!");
}
Run Code Online (Sandbox Code Playgroud)

如何更改最后一部分,以便从匹配中返回ID?

干杯!

Jon*_*eet 61

我想你想要的

match.Groups[1].Value
Run Code Online (Sandbox Code Playgroud)

(正如Dillie-O在评论中指出的那样,它是第1组,因为第0组始终是整场比赛.)

简短但完整的测试程序:

using System;
using System.Text.RegularExpressions;

class Program
{
  static void Main()
  {
    Regex regex = new Regex("<key>LibID</key><val>([a-fA-F0-9]{4})</val>");
    Match match = regex.Match("Before<key>LibID</key><val>A67A</val>After");

    if (match.Success)
    {
      Console.WriteLine("Found Match for {0}", match.Value);
      Console.WriteLine("ID was {0}", match.Groups[1].Value);
    }      
  }
}
Run Code Online (Sandbox Code Playgroud)

输出:

Found Match for <key>LibID</key><val>A67A</val>
ID was A67A
Run Code Online (Sandbox Code Playgroud)

  • 打败我.您已经在安德鲁使用了分组匹配,因此您可以轻松提取分组值.哦,对于记录,索引0包含整个字符串,这就是检查索引1的原因. (3认同)