0

其实我最初误解了这个问题,

基本上我检查是否有错误,并检查某些会破坏它的可怕字符,但这不适用于括号,我需要在通过 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));
            }
4

2 回答 2

1

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

var someString = "[Hello"
if(someString.contains("["))
{
    someString.Replace("[","");
}
if (someString.Contains("]"))
{ 
    someString.Replace("]","");
}
于 2012-07-25T13:52:07.833 回答
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, "[", "]");
于 2012-07-25T14:08:22.097 回答