Как извлечь подстроку из .NET RegEx? - PullRequest
33 голосов
/ 10 апреля 2009

У меня есть XML-файл, содержащий одну (или более) пару ключ / значение. Для каждой из этих пар я хочу извлечь значение, представляющее собой двухбайтовое шестнадцатеричное значение.

Итак, XML содержит этот фрагмент:

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

Что я могу сопоставить, используя следующее выражение с идентификатором в скобках.

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!");
}

Как я могу изменить последнюю часть, чтобы она возвращала идентификатор из матча?

Ура!

Ответы [ 2 ]

58 голосов
/ 10 апреля 2009

Я думаю, что вы хотите

match.Groups[1].Value

(Как указывает Дилли-О в комментариях, это группа 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
1 голос
/ 10 апреля 2009

Добавить группирующую конструкцию к вашему выражению ...

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

Это захватит идентификатор. Но вам нужно указать правильный формат в вашем выражении для действительного идентификатора, потому что ваше регулярное выражение будет захватывать буквально только «LibID».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...