3

我有以下字符串正则表达式

"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"
4

5 回答 5

5

这可以使用HTML Agility Pack(开源项目http://html-agility-pack.net)以另一种(更安全的)方式完成。

它考虑了各种符号<br><br/><br /> 您不必担心。这意味着您可以专注于实际任务:替换重复项。

请参阅使用 HTML Agility Pack 删除重复元素链,它解释了如何替换重复元素的方法。

于 2013-04-23T10:44:37.637 回答
4

如果您需要考虑标签之间有空格的情况,请尝试以下正则表达式:

myInputStr = Regex.Replace(myInputStr,
    @"([\b\s]*<[\b\s]*[bB][rR][\s]*/?[\b\s]*>){2,}",
    "<br>", RegexOptions.Multiline);

<br>此正则表达式将用单个实例替换 2 个或更多标签实例,而不管标签的形成(间距、大小写、自闭合等)。

于 2013-04-23T10:33:09.113 回答
2

编辑:如果你不知道<br>你有多少,你可以这样做:

  1. 拆分您的字符串<br>并删除空条目。
  2. 用单个连接字符串<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);
于 2013-04-23T10:27:57.180 回答
0

就像 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>

于 2013-04-23T10:30:00.887 回答
0
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.

于 2013-04-23T10:52:03.310 回答