Как извлечь подстроку из .NET RegEx?
У меня есть 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!");
}
Как я могу изменить последнюю часть, чтобы она возвращала идентификатор из соответствия?
Ура!
Ответы
Ответ 1
Я думаю, что вы хотите
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
Ответ 2
Добавьте группировать конструкцию в ваше выражение...
<key>(?<id>LibID)</key><val>([a-fA-F0-9]{4})</val>
Это приведет к захвату идентификатора. Но вам нужно поместить правильный формат в ваше выражение для фактического идентификатора, потому что ваше регулярное выражение будет захватывать только "LibID".