使用regex c#从字符串中删除连续的<br/>

时间:2013-04-23 10:25:17

标签: c# regex

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

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

5 个答案:

答案 0 :(得分:5)

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

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

请参阅Remove chain of duplicate elements with HTML Agility Pack,它解释了如何替换重复项的方法。

答案 1 :(得分:4)

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

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

这个正则表达式将用一个实例替换2个或更多个<br>标签实例,无论标签的形成如何(间距,套管,自闭合等)。

答案 2 :(得分:2)

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

  1. 使用<br>拆分字符串并删除空条目。
  2. 使用单个<br>
  3. 加入字符串

    以下是代码:

    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);
    

答案 3 :(得分:0)

像马丁伊登一样:

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>

的情况下执行多个此类行

答案 4 :(得分:0)

Regex.Replace(input, @"(<br\s*/{0,1}>\s*(</\s*br>)*){2,}", "<br>", 
    RegexOptions.CultureInvariant | 
    RegexOptions.IgnoreCase |
    RegexOptions.Multiline);

使用单个<br>替换<br/><br></br><br>的任何两个或多个出现。

这会考虑空格。 <br >会匹配<br /><br > </ br>

如果您删除不需要的&#34; \ r \ n&#34;事先你可以省略RegexOptions.Multiline