RegEx для получения текста в тегах
Мне нужно Regular Expressions, чтобы получить текст в двух тегах.
Предположим, что мне нужен массив, содержащий любой текст в тегах <data
> и </data
> .
Или любой текст внутри "(" и ")" тегов.
Как я могу сделать это с помощью RegEx в С#?
Расширенный вопрос:
- Строка ввода "color = rgb (50,20,30)"
- Как я могу получить 3 числа в 3 отдельных слотах массива, возвращенных процессором RegEx в С#?
Ответы
Ответ 1
Поскольку вы специально упомянули С#, вот как я делаю точный синтаксический анализ:
private static readonly Regex RgbValuePattern = new Regex(@"(?<r>\d{1,3}) ?, ?(?<g>\d{1,3}) ?, ?(?<b>\d{1,3})",
RegexOptions.Compiled | RegexOptions.ExplicitCapture);
Затем позже...
var match = RgbValuePattern.Match(value);
if (match.Success)
{
int r = Int32.Parse(match.Groups["r"].Value, NumberFormatInfo.InvariantInfo);
int g = Int32.Parse(match.Groups["g"].Value, NumberFormatInfo.InvariantInfo);
int b = Int32.Parse(match.Groups["b"].Value, NumberFormatInfo.InvariantInfo);
return Color.FromArgb(r, g, b);
}
Ответ 2
Perl regexp будет
$string =~ /color=rgb\((\d+),(\d+),(\d+)\)/;
@array = ($1,$2,$3);
Но вам, вероятно, нужна дополнительная информация.
Ответ 3
В этом подобном вопросе есть ответы, которые помогут:
Ответ 4
Использование Regex для синтаксического анализа XML обычно является очень плохой идеей. См. этот ответ.
Ответ 5
Я считаю, что реальные проблемы возникнут, когда вы захотите проанализировать конструкции вложенности. Например, когда вы хотите изучить XML как это
<data><data>123</data><data>456</data></data>
для извлечения данных, включенных в самые внешние теги <data>
, одного RegEx не хватит. Просто предупредите, чтобы вы не использовали RegEx, где существуют еще несколько (мощных и специфических) методов. Реальные парсеры XML следует учитывать при выполнении более сложных задач в XML. Мои 2 цента...