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

jm2pwxwz  于 2023-05-01  发布在  其他
关注(0)|答案(2)|浏览(120)

我有一个包含一个(或多个)键/值对的XML文件。对于这些对,我想提取两个字节十六进制值的值。
XML包含以下代码段:

<key>LibID</key><val>A67A</val>

我可以使用下面的表达式匹配它,括号中是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!");
}

如何更改最后一部分,使其返回匹配的ID?

eqqqjvef

eqqqjvef1#

我觉得你想

match.Groups[1].Value

(As 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);
    }      
  }
}

输出:

Found Match for <key>LibID</key><val>A67A</val>
ID was A67A
qvk1mo1f

qvk1mo1f2#

在表达式中添加grouping construct。..

<key>(?<id>LibID)</key><val>([a-fA-F0-9]{4})</val>

这将捕获ID。但是,您需要在表达式中为实际ID输入正确的格式,因为正则表达式将只捕获“LibID”。

相关问题