我有以下字符串正则表达式
"choose to still go on the trip. <br><br>\r\nNote that when booking"
用正则表达式转换它后,我只需要用一个替换<br>
标签,<br>
所以字符串会是这样的
"choose to still go on the trip. <br>Note that when booking"
这可以使用HTML Agility Pack(开源项目http://html-agility-pack.net)以另一种(更安全的)方式完成。
它考虑了各种符号<br>
,<br/>
而<br />
您不必担心。这意味着您可以专注于实际任务:替换重复项。
请参阅使用 HTML Agility Pack 删除重复元素链,它解释了如何替换重复元素的方法。
如果您需要考虑标签之间有空格的情况,请尝试以下正则表达式:
myInputStr = Regex.Replace(myInputStr,
@"([\b\s]*<[\b\s]*[bB][rR][\s]*/?[\b\s]*>){2,}",
"<br>", RegexOptions.Multiline);
<br>
此正则表达式将用单个实例替换 2 个或更多标签实例,而不管标签的形成(间距、大小写、自闭合等)。
编辑:如果你不知道<br>
你有多少,你可以这样做:
<br>
并删除空条目。<br>
这是代码:
string yourString = "choose to still go on the trip. <br><br>\r\nNote that when booking";
var temp =
yourString.Split(new string[] { "<br>" }, StringSplitOptions.RemoveEmptyEntries)
.Where(i => i.Replace(" ", string.Empty).Length > 0);
string result = string.Join("<br>", temp);
就像 Martin Eden 所认为的:
while (text.Contains("<br><br>"))
{
text = text.Replace("<br><br>", "<br>");
}
或者
string newString = oldString.Replace("<br><br><br>", "<br>");
newString = newString.Replace("<br><br>", "<br>");
做多条这样的行,增加<br>
Regex.Replace(input, @"(<br\s*/{0,1}>\s*(</\s*br>)*){2,}", "<br>",
RegexOptions.CultureInvariant |
RegexOptions.IgnoreCase |
RegexOptions.Multiline);
用单个替换 or 的任何两个或<br>
多个<br/>
出现。<br></br>
<br>
这会考虑空格。<br >
将与<br />
or匹配<br > </ br>
。
如果您事先删除不需要的“\r\n”,则可以省略RegexOptions.Multiline
.