从字符串的开头和结尾删除BR标记

时间:2013-09-10 11:03:11

标签: c# regex string

我如何使用

之类的东西
return Regex.Replace("/(^)?(<br\s*\/?>\s*)+$/", "", source);

取代这种情况:

<br>thestringIwant => thestringIwant
<br><br>thestringIwant => thestringIwant
<br>thestringIwant<br> => thestringIwant
<br><br>thestringIwant<br><br> => thestringIwant
thestringIwant<br><br> => thestringIwant

它可以在开头或结尾有多个br标签,但我不想删除中间的任何br标签。

7 个答案:

答案 0 :(得分:5)

一些循环可以解决问题并且更容易阅读和理解(使用正则表达式=明天你看看你自己的代码,想知道到底发生了什么)

while(source.StartsWith("<br>")) 
    source = source.SubString(4);
while(source.EndsWith("<br>"))  
    source = source.SubString(0,source.Length - 4);

return source;

答案 1 :(得分:1)

当我看到你的正则表达式时,听起来br标签中可能有空格。 所以你可以尝试类似的东西:

string s = Regex.Replace(input,@"\<\s*br\s*\/?\s*\>","");

答案 2 :(得分:0)

无需使用正则表达式

你可以简单地使用

yourString.Replace("<br>", "");

这将从您的字符串中删除<br>的所有出现。

修改

要保持字符串之间的标签,请按以下方式使用 -

var regex = new Regex(Regex.Escape("<br>"));
var newText = regex.Replace("<br>thestring<br>Iwant<br>", "<br>", 1);

newText = newText.Substring(0, newText.LastIndexOf("<br>"));

Response.Write(newText);

这将仅从您的字符串中删除<br>的第一次和最后一次出现。

答案 3 :(得分:0)

您可以为此内容编写扩展方法

 public static string TrimStart(this string value, string stringToTrim)
    {
        if (value.StartsWith(stringToTrim, StringComparison.CurrentCultureIgnoreCase))
        {
            return value.Substring(stringToTrim.Length);
        }
        return value;
    }


    public static string TrimEnd(this string value, string stringToTrim)
    {
        if (value.EndsWith(stringToTrim, StringComparison.CurrentCultureIgnoreCase))
        {                
            return value.Substring(0, value.Length - stringToTrim.Length);
        }
        return value;
    }

你可以称之为

 string example = "<br> some <br> test <br>";
 example = example.TrimStart("<br>").TrimEnd("<br>"); //output  some <br> test 

答案 4 :(得分:0)

如果您还希望它与

一起使用
<br />

然后你可以使用

return Regex.Replace("((:?<br\s*/?>)*<br\s*/?>$|^<br\s*/?>(:?<br\s*/?>)*)", "", source);

编辑:

现在它还应该照顾多个

<br\s*/?>

在行的开头和结尾

答案 5 :(得分:0)

如何做到这一点呢......

result1 = Regex.Replace("/^(<br\s*\/?>\s*)+/", "", source);

然后将结果输入

result2 = Regex.Replace("/(<br\s*\/?>\s*)+$/", "", result1);

我知道这会增加一些额外的开销,但会极大地简化事情,并且可以避免尝试对抗不是BR的中间的所有内容。

注意这两者之间的细微差别..一个在开始时匹配它们,一个在结束时匹配它们。这样做可以保持正则表达式的灵活性,允许BR标签的一般格式化,而不是过于严格。

答案 6 :(得分:0)

我相信人们不应该忽视正则表达式的力量。如果你恰当地命名正则表达式,那么将来维护它就不难了。

我编写了一个使用Regex完成任务的示例程序。它还忽略了开头和结尾的字符大小写和空格。您可以尝试其他的源字符串样本。

最重要的是,它会更快。

using System;
using System.Text.RegularExpressions;

namespace ConsoleDemo
{
    class Program
    {
        static void Main(string[] args)
        {

            string result;
            var source = @"<br><br>thestringIwant<br><br> => thestringIwant<br/> same <br/> <br/>  ";
            result = RemoveStartEndBrTag(source);
            Console.WriteLine(result);
            Console.ReadKey();
        }

        private static string RemoveStartEndBrTag(string source)
        {
            const string replaceStartEndBrTag = @"(^(<br>[\s]*)+|([\s]*<br[\s]*/>)+[\s]*$)";
            return Regex.Replace(source, replaceStartEndBrTag, "", RegexOptions.IgnoreCase);
        }
    }
}