检查括号并将其删除

时间:2012-07-25 13:42:34

标签: c#

我实际上误解了这个问题,

基本上我检查是否有错误,并检查某些可怕的字符是否会破坏它,但是这对括号不起作用,我需要基本检查字符串中是否有任何括号在传递之前它通过SQL,如果有的话,直接从字符串中删除它们。

例如说我有一个看起来像

的字符串
[I am a magical string with super powers!){

我希望删除所有这些可怕的括号!

 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[] 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();

        //Union with the full text search
        if (!string.IsNullOrEmpty(fTextSearch))
            {
                sql.AppendLine("UNION");
                sql.AppendLine(commonClause);
                sql.AppendLine(string.Format("AND CONTAINS(nt.text, '{0}', LANGUAGE 'English')", newString));
            }

2 个答案:

答案 0 :(得分:1)

这是一种方法。您可以通过传入一组字符然后测试这些字符而不是对括号进行硬编码来使其更复杂。

var someString = "[Hello"
if(someString.contains("["))
{
    someString.Replace("[","");
}
if (someString.Contains("]"))
{ 
    someString.Replace("]","");
}

答案 1 :(得分:0)

如果我理解你,如果它们不匹配,你只想删除括号。

这将实现:

    public string MatchPair(string input, string item1, string item2)
    {
        var ix1 = input.IndexOf(item1);
        var ix2 = input.IndexOf(item2);

        if ((ix1 != -1) && (ix2 != -1))
        {
            return input;
        }

        if (ix1 == -1)
        {
            return this.CutString(input, ix2, item2);
        }

        if (ix2 == -1)
        {
            return this.CutString(input, ix1, item1);
        }

        return string.Empty;
    }

    public string CutString(string input, int ix, string item)
    {
        string left = input.Substring(0, ix);
        string right = input.Substring(ix + item.Length);

        return left + right;
    }

以下是我使用的一些测试数据:

        var str1 = "[hello]";
        var str2 = "[hello";
        var str3 = "hel]lo";
        var str4 = "hel[lo";

        var res1 = this.MatchPair(str1, "[", "]");
        var res2 = this.MatchPair(str2, "[", "]");
        var res3 = this.MatchPair(str3, "[", "]");
        var res4 = this.MatchPair(str4, "[", "]");