Подтвердить что ты не робот

RegEx для получения текста в тегах

Мне нужно Regular Expressions, чтобы получить текст в двух тегах.

Предположим, что мне нужен массив, содержащий любой текст в тегах <data > и </data > . Или любой текст внутри "(" и ")" тегов.

Как я могу сделать это с помощью RegEx в С#?


Расширенный вопрос:

  • Строка ввода "color = rgb (50,20,30)"
  • Как я могу получить 3 числа в 3 отдельных слотах массива, возвращенных процессором RegEx в С#?
4b9b3361

Ответ 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);

Но вам, вероятно, нужна дополнительная информация.

Ответ 4

Использование Regex для синтаксического анализа XML обычно является очень плохой идеей. См. этот ответ.

Ответ 5

Я считаю, что реальные проблемы возникнут, когда вы захотите проанализировать конструкции вложенности. Например, когда вы хотите изучить XML как это <data><data>123</data><data>456</data></data> для извлечения данных, включенных в самые внешние теги <data>, одного RegEx не хватит. Просто предупредите, чтобы вы не использовали RegEx, где существуют еще несколько (мощных и специфических) методов. Реальные парсеры XML следует учитывать при выполнении более сложных задач в XML. Мои 2 цента...