在C#.NET中使用Regex删除一段文本

时间:2011-06-13 16:52:17

标签: .net regex

我不知道正则表达式,只是一个小任务,我不想坐下来学习它们 - 更不用说它们看起来很复杂。我想要做的是将一个段落传递给一个方法并删除一个以参数“begin”开头并以参数“end”结尾的文本。

    public static string RemoveBetween(string wholeText, string begin, string end) 
    { 

    } 

例如:

string myString = "one two three four five";
myString = RemoveBetween(myString, "two", "four");

最后一个字符串是“一五”

4 个答案:

答案 0 :(得分:6)

public static string RemoveBetween(string wholeText, string begin, string end) 
{ 
    Regex.Replace(wholeText, String.Format("{0}.*?{1}", Regex.Escape(begin), Regex.Escape(end)), String.Empty);
}

易。说真的,学习正则表达式;他们需要进行大量的解析并将其缩减为一行代码。

作为比较,这里有一些近似于没有正则表达式时你必须做的事情:

public static string RemoveBetween(string wholeText, string begin, string end) 
{ 
    var result = wholeString;
    var startIndex = result.IndexOf(begin);
    while(startIndex >=0)
    {
        var endIndex = result.IndexOf(end) + end.Length;
        //TODO: Define behavior for when the end string doesn't appear or is before the begin string
        result = result.Substring(0,startIndex) + result.Substring(endIndex+1, result.Length - endIndex);
        startIndex = result.IndexOf(begin);
    }
    return result;
}

答案 1 :(得分:0)

这是另一个例子,分步完成,以便更容易理解发生的事情,

public static string RemoveBetween(string wholeText, string begin, string end) 
{
    int indexOfBegin = wholeText.IndexOf(begin);
    int IndexOfEnd = wholeText.IndexOf(end);

    int lenght = IndexOfEnd + end.Length - indexOfBegin;

    string removedString = wholeText.Substring(indexOfBegin, lenght);

    return  wholeText.Replace(removedString, "");
}

答案 2 :(得分:0)

你当然不需要正则表达式,如果你不使用它们,你会更容易检查输入。

public static string RemoveBetween( string wholeText, string begin, string end ) {
    var beginIndex = wholeText.IndexOf( begin );
    var endIndex = wholeText.IndexOf( end );

    if( beginIndex < 0 || endIndex < 0 || beginIndex >= endIndex ) {
        return wholeText;
    }

    return wholeText.Remove( beginIndex, endIndex - beginIndex + end.Length );
}

答案 3 :(得分:-2)

也许是这样。

string myString = "one two three four five";
        myString = myString.Substring(0, myString.IndexOf("two")) + myString.Substring(myString.IndexOf("four") + "four".Length);