删除字符串中第一个出现的段落标记内容
本文关键字:段落标 字符串 第一个 删除 | 更新日期: 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>