从字符串中删除已定义的部分

时间:2014-05-22 09:16:39

标签: c# string char

让我说我有这个字符串:

string text = "Hi my name is <crazy> Bob";

我想带走括号内的所有内容,结果如下:

"Hi my name is Bob". 

所以我已经尝试了这个,我知道我一直认为while循环错了,但我无法解决这个问题。

    public static string Remove(string text)
    {
        char[] result = new char[text.Length];

        for (int i = 0; i < text.Length; i++ )
        {
            if (text[i] == '<')
            {
                while (text[i] != '>')
                {
                    result[i] += text[i];
                }
            }
            else
            {
                result[i] += text[i];
            }
        }
        return result.ToString();
    }

4 个答案:

答案 0 :(得分:11)

试试这个正则表达式:

public static string Remove(string text)
{
    return  Regex.Replace(text, "<.*?>","");
}

答案 1 :(得分:6)

看看这个循环:

while (text[i] != '>')
{
    result[i] += text[i];
}

这将继续执行,直到条件不满足为止。鉴于你没有改变text[i],它永远不会停止......

此外,您正在ToString上致电char[],而StringBuilder没有做您想做的事情,即使这样做,您也会遗留下来字符。

如果你想像这样循环,我会使用public static string RemoveAngleBracketedContent(string text) { var builder = new StringBuilder(); int depth = 0; foreach (var character in text) { if (character == '<') { depth++; } else if (character == '>' && depth > 0) { depth--; } else if (depth == 0) { builder.Append(character); } } return builder.ToString(); } ,并且只是跟踪你是否&#34;在&#34;角支架与否:

// You can reuse this every time
private static Regex AngleBracketPattern = new Regex("<[^>]*>");
...

text = AngleBracketPattern.Replace(text, "");

或者,使用正则表达式。让它来应对嵌套的尖括号会相对棘手,但如果你不需要它,它就非常简单:

"Hi my name is <crazy> Bob"

最后一个问题 - 在从"Hi my name is Bob"移除角度括号内的文字后,你实际得到{{1}} - 注意双倍空格。

答案 2 :(得分:2)

使用

string text = "Hi my name is <crazy> Bob";
text = System.Text.RegularExpressions.Regex.Replace(text, "<.*?>",string.Empty);

答案 3 :(得分:0)

我建议使用正则表达式。

public static string DoIt(string content, string from, string to)
{
    string regex = $"(\\{from})(.*)(\\{to})";
    return Regex.Replace(content, regex, "");
}