C#中的案例不敏感比较

时间:2012-05-29 10:27:19

标签: c# string comparison

我使用以下代码比较两个字符串

string1.Contains(字符串2)

但我没有得到不区分大小写搜索的结果。此外,我不能使用String.Compare因为我不想匹配整个名称,因为名称非常大。 我需要进行不区分大小写的搜索,搜索文本可以是String1包含的任何长度。

例如,期限* * ** * ** * ** * ** < em> * 是名称。    我在文本框中输入“erm”,我得到了结果。但当我输入“期限”时,我得不到任何结果。 任何人都可以帮助我:)

7 个答案:

答案 0 :(得分:17)

string.Equals("this will return true", "ThIs WiLL ReTurN TRue", StringComparison.CurrentCultureIgnoreCase)

或,包含

if (string1.IndexOf(string2, StringComparison.CurrentCultureIgnoreCase) >= 0)

答案 1 :(得分:10)

我更喜欢这样的扩展方法。

public static class StringExtensions
{
    public static bool Contains(this string source, string value, StringComparison compareMode)
    {
        if (string.IsNullOrEmpty(source))
            return false;

        return source.IndexOf(value, compareMode) >= 0;
    }
}

请注意,通过这种方式,您可以避免在大写或小写中进行代价高昂的转换。

您可以使用此语法

调用扩展程序
 bool result = "This is a try".Contains("TRY", StringComparison.InvariantCultureIgnoreCase);
 Console.WriteLine(result);

请注意:上面的扩展名(对于每个扩展方法都是如此)应该在非嵌套的非泛型静态类See MSDN Ref

中定义

答案 2 :(得分:6)

将两个字符串转换为相同的案例upperlower

string1.ToUpper().Contains(string2.ToUpper());

答案 3 :(得分:5)

为什么不这样:

if (string1.IndexOf(string2, StringComparison.OrdinalIgnoreCase) >= 0)
{  
}

答案 4 :(得分:0)

string1.ToUpperInvariant().Contains(string2.ToUpperInvariant());

答案 5 :(得分:0)

您可以将两个字符串转换为大写,也可以使用正则表达式:

using System.Text.RegularExpressions;

class Program {
    static void Main(string[] args) {
        string string1 = "TermSomething";
        string string2 = "term";
        bool test1 = string1.ToUpperInvariant().Contains(string2.ToUpperInvariant());
        bool test2 = Regex.IsMatch(string1, Regex.Escape(string2), RegexOptions.IgnoreCase);
    }
}

请注意,如果使用正则表达式,则应该转义搜索字符串,以便按字面解释特殊的正则表达式字符。

答案 6 :(得分:0)

Regex.IsMatch(string1,string2,RegexOptions.IgnoreCase);

返回布尔值.....