我试图删除<br />标签之间出现的<pre></pre>标签.我的字符串看起来像
string str = "Test<br/><pre><br/>Test<br/></pre><br/>Test<br/>---<br/>Test<br/><pre><br/>Test<br/></pre><br/>Test"
string temp = "`##`";
while (Regex.IsMatch(result, @"\<pre\>(.*?)\<br\>(.*?)\</pre\>", RegexOptions.IgnoreCase))
{
result = System.Text.RegularExpressions.Regex.Replace(result, @"\<pre\>(.*?)\<br\>(.*?)\</pre\>", "<pre>$1" + temp + "$2</pre>", RegexOptions.IgnoreCase);
}
str = str.Replace(temp, System.Environment.NewLine);
Run Code Online (Sandbox Code Playgroud)
但这取代了整个文本中br>第一个和最后一个之间的所有< 标签<pre>.因此,我的最终结果是:
str = "Test<br/><pre>\r\nTest\r\n</pre>\r\nTest\r\n---\r\nTest\r\n<pre>\r\nTest\r\n</pre><br/>Test"
Run Code Online (Sandbox Code Playgroud)
我希望我的结果是
str = "Test<br/><pre>\r\nTest\r\n</pre><br/>Test<br/>---<br/>Test<br/><pre>\r\nTest\r\n</pre><br/>Test"
Run Code Online (Sandbox Code Playgroud)
好的。所以我发现了我的代码的问题。问题是,Regex.IsMatch 只考虑 的第一次出现<pre>和最后一次出现</pre>。我想考虑单独的一套<pre>替换品。所以我将我的代码修改为
foreach (Match regExp in Regex.Matches(str, @"\<pre\>(.*?)\<br\>(.*?)\</pre\>", RegexOptions.IgnoreCase))
{
matchFound = true;
str = str.Replace(regExp.Value, regExp.Value.Replace("<br>", temp));
}
Run Code Online (Sandbox Code Playgroud)
效果很好。无论如何,感谢大家的回复。