如何删除字符串中第一个出现的段落标记内容。
Actual String
<p>Hello</p> <p>World</p>
Result
<p>World</p>
一种选择是找到第一个<p>
和第一个</p>
的位置,然后用“”替换所有内容</p>
如何使用正则表达式实现这一目标?
答案 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>
(?s)
允许点匹配新行,以防第一行出现在第一行(\A.*?)
\A
断言我们位于字符串的开头,然后懒惰的.*?
匹配第一段的所有内容。这一切都被捕获到第1组。<p>.*?</p>
符合段落这是一个完整的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>