删除字符串中首先出现的段落标记内容

时间:2014-06-18 11:37:43

标签: c# asp.net regex vb.net

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

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

Result
<p>World</p>

一种选择是找到第一个<p>和第一个</p>的位置,然后用“”替换所有内容</p>

如何使用正则表达式实现这一目标?

3 个答案:

答案 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);

答案 1 :(得分:0)

除了使用正则表达式解析html的警告......

:一种。如果第一段始终始于字符串的开头

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

在C#中:

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

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

  • 搜索:(?s)(\A.*?)<p>.*?</p>
  • 替换:在委托功能中,返回第1组。
  • (?s)允许点匹配新行,以防第一行出现在第一行
  • 之后
  • (\A.*?) \A断言我们位于字符串的开头,然后懒惰的.*?匹配第一段的所有内容。这一切都被捕获到第1组。
  • <p>.*?</p>符合段落
  • 替换为第1组,因此该段落将被删除。

这是一个完整的C#程序,用于显示其工作原理(请参阅online demo底部的输出)。

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

答案 2 :(得分: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>