检查并删除字符串中的所有字符

问题描述 投票:0回答:8

我想知道指定像这样的字符数组的最佳方法是什么

{
}
[
]

然后检查字符串,如果存在,则将其完全删除。

        if (compiler.Parser.GetErrors().Count == 0)
        {
            AstNode root = compiler.Parse(phrase.ToLower());
            if (compiler.Parser.GetErrors().Count == 0)
            {
                try
                {
                    fTextSearch = SearchGrammar.ConvertQuery(root, SearchGrammar.TermType.Inflectional);
                }
                catch
                {
                    fTextSearch = phrase;
                }
            }
            else
            {
                fTextSearch = phrase;
            }
        }
        else
        {
            fTextSearch = phrase;
        }

        string[] brackets = brackets = new string[]
        {
            "{",
            "}",
            "[",
            "]"
        };

        string[] errorChars = errorChars = new string[]
        {
            "'",
            "&"
        };

        StringBuilder sb = new StringBuilder();

        string[] splitString = fTextSearch.Split(errorChars, StringSplitOptions.None);

        int numNewCharactersAdded = 0;
        foreach (string itm in splitString)
        {
            sb.Append(itm); //append string
            if (fTextSearch.Length > (sb.Length - numNewCharactersAdded))
            {
                sb.Append(fTextSearch[sb.Length - numNewCharactersAdded]); //append splitting character
                sb.Append(fTextSearch[sb.Length - numNewCharactersAdded - 1]); //append it again
                numNewCharactersAdded++;
            }
        }

        string newString = sb.ToString();
c#
8个回答
11
投票

正则表达式可以更容易地做到这一点:

var result = Regex.Replace(input, @"[[\]()]", "");

使用字符集([...])来匹配其中的任何字符,并且不进行任何替换。 Regex.Replace将替换所有匹配项。


6
投票

另一种简洁的方法是使用Regex.Replace来获取字符集的差异(假设Enumerable.Except是字符):

Enumerable.Except

2
投票
brackets

0
投票

怎么样:

String newString = new String(oldString.Except(brackets).ToArray());

您最终得到:

a12drrferrvgbrtg


0
投票

我不知道我是否理解您的问题,但是您可以通过以下方式解决您的问题:

string str = "faslkjnro(fjrmn){ferqwe}{{";
char[] separators = new []{'[', ']','{','}' };
var sb = new StringBuilder();
foreach (var c in str)
{
    if (!separators.Contains(c))
    {
        sb.Append(c);
    }
}

return sb.ToString();

或带有扩展方法

string myString = "a12{drr[ferr]vgb}rtg";
myString = myString.Replace("[", "").Replace("{", "").Replace("]", "").Replace("}", "");

与此,您可以使用string toRemove = "{}[]"; string result = your_string_to_be_searched; foreach(char c in toRemove) result = result.Replace(c.ToString(), "");


0
投票
static class Extensions
{
    public static string RemoveAll(this string src, string chars)
    {
        foreach(char c in chars)
            src= src.Replace(c.ToString(), "");
        return src;
    }
}

与其他一些类似答案相比,这样做的主要优点是,您不必费心确定需要在RegEx中转义哪些字符;您可以让图书馆为您处理。


0
投票

您可以像这样紧凑地完成此操作:

string result = your_string_to_be_searched.RemoveAll("{}[]");

或此:

string charsToRemove = @"[]{}";
string pattern = string.Format("[{0}]", Regex.Escape(charsToRemove));
var result = Regex.Replace(input, pattern, "");

0
投票

只需将.Split()与所需可移动对象的char []一起使用,并使用.Join()或.Concat()捕获它>

string s = "ab{c[d]}";
char[] ca = new char[] {'{', '}', '[', ']'};
Array.ForEach(ca, e => s = s.Replace(e.ToString(), ""));
© www.soinside.com 2019 - 2024. All rights reserved.