Как я могу удалить первое содержимое тега абзаца в строке.
Actual String
<p>Hello</p> <p>World</p>
Result
<p>World</p>
Один из вариантов - найти положение первого <p>
и первого </p>
а затем заменить все на "" на позицию </p>
Как это может быть достигнуто с помощью регулярного выражения?
Помимо предупреждений об использовании regex для анализа html...
A. Если первый абзац всегда начинается с начала строки
^<p>.*?</p>
^
утверждает, что мы находимся в начале строки..*?
гарантирует, что мы сопоставим только с первым закрытием </p>
В С#:
string resultString = Regex.Replace(yourstring, "^<p>.*?</p>", "");
B. Если первый абзац может начинаться в любом месте
(?s)(\A.*?)<p>.*?</p>
(?s)
позволяет точке совпадать с символами новой строки, если ваш первый абзац появляется после первой строки(\A.*?)
\A
утверждает, что мы находимся в начале строки, тогда ленивый .*?
соответствует всем до первого абзаца. Все это захвачено в группу 1.<p>.*?</p>
соответствует абзацуВот полная программа на С#, чтобы показать, как это работает (см. Вывод в нижней части онлайн-демонстрации).
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
Используйте метод Regex.Replace
определяющий счетчик (время замены может быть) до 1
Regex rgx = new Regex(@"<p>.*?</p>*");
String input = @"<p>Hello</p> <p>World</p>";
String result = rgx.Replace(input, "", 1);
Вы можете захватить группу в строке следующим образом:
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>