删除字符串中第一个出现的段落标记内容

本文关键字:段落标 字符串 第一个 删除 | 更新日期: 2023-09-27 18:09:12

如何删除字符串中第一个出现的段落标记内容。

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

一种选择是找到第一个<p>和第一个</p>的位置,然后将所有内容替换为"来定位</p>

如何用正则表达式实现这一点?

删除字符串中第一个出现的段落标记内容

使用Regex.Replace方法定义1的计数(可能发生的替换次数)

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

除了使用regex解析html的警告…

。如果第一段总是以字符串开头

  • 搜索:^<p>.*?</p>
  • 替换:空字符串
  • ^锚断言我们位于字符串的开头。
  • 惰性.*?确保我们只匹配到第一个关闭的</p>

在c#中:

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

B。如果第一段可以从任何地方开始

  • 搜索:(?s)('A.*?)<p>.*?</p>
  • 替换:在委托函数中,返回组1。
  • (?s)允许点匹配换行符,如果你的第一段出现在第一行之后
  • ('A.*?)中,'A断言我们位于字符串的开头,然后惰性.*?匹配直到第一段的所有内容。这些都归第一组。
  • <p>.*?</p>匹配段落
  • 替换为第1组,因此删除该段。

下面是一个完整的c#程序来展示它是如何工作的(请参阅在线演示底部的输出)。

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

您可以像这样捕获字符串中的group:

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>