удалить содержимое первого встречающегося тега абзаца в строке

1

Как я могу удалить первое содержимое тега абзаца в строке.

Actual String
<p>Hello</p> <p>World</p>

Result
<p>World</p>

Один из вариантов - найти положение первого <p> и первого </p> а затем заменить все на "" на позицию </p>

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

Теги:

3 ответа

0
Лучший ответ

Помимо предупреждений об использовании regex для анализа html...

A. Если первый абзац всегда начинается с начала строки

  • Поиск: ^<p>.*?</p>
  • Заменить: пустая строка
  • Якорь ^ утверждает, что мы находимся в начале строки.
  • Лень .*? гарантирует, что мы сопоставим только с первым закрытием </p>

В С#:

string resultString = Regex.Replace(yourstring, "^<p>.*?</p>", "");

B. Если первый абзац может начинаться в любом месте

  • Поиск: (?s)(\A.*?)<p>.*?</p>
  • Заменить: в функции делегата вернуть группу 1.
  • (?s) позволяет точке совпадать с символами новой строки, если ваш первый абзац появляется после первой строки
  • В (\A.*?) \A утверждает, что мы находимся в начале строки, тогда ленивый .*? соответствует всем до первого абзаца. Все это захвачено в группу 1.
  • <p>.*?</p> соответствует абзацу
  • Замена - это группа 1, поэтому абзац удален.

Вот полная программа на С#, чтобы показать, как это работает (см. Вывод в нижней части онлайн-демонстрации).

using System;
using System.Text.RegularExpressions;
class Program
{
static void Main() {
var myRegex = new Regex(@"(?s)(\A.*?)<p>.*?</p>");
string s1 = @"Hey! <p>Hello</p> <p>World</p>";

string replaced = myRegex.Replace(s1, delegate(Match m) {
return m.Groups[1].Value;
});
Console.WriteLine(replaced);

} // END Main
} // END Program
  • 0
    К вашему сведению Добавлено полное объяснение обоих методов. :)
  • 0
    Рад, что это работает! Увидимся в следующий раз. :)
1

Используйте метод Regex.Replace определяющий счетчик (время замены может быть) до 1

Regex rgx     = new Regex(@"<p>.*?</p>*");
String input  = @"<p>Hello</p> <p>World</p>";
String result = rgx.Replace(input, "", 1);
0

Вы можете захватить группу в строке следующим образом:

string input = @"<p>Hello</p> <p>World</p>";
string pattern = @"<p>(\w*)</p>";
MatchCollection matches = Regex.Matches(input, pattern);
// matches[0] contains <p>Hello</p>
// matches[1] contains <p>World</p>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню