17

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

字符串1.包含(字符串2)

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

例如 Term* * ** * ** * ** * ** *是名称。我在文本框中输入“erm”我得到了结果。但是当我输入“术语”时,我没有得到任何结果。谁能帮我 :)

4

7 回答 7

19

尝试这个:

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

或者,对于包含:

if (string1.IndexOf(string2, StringComparison.CurrentCultureIgnoreCase) >= 0)
于 2012-05-29T10:31:56.693 回答
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);

请注意:上述扩展(对于每个扩展方法都是如此)应在非嵌套、非泛型静态类中定义,请参阅 MSDN 参考

于 2012-05-29T10:36:39.757 回答
6

将两个字符串转换为相同的大小写大写小写

string1.ToUpper().Contains(string2.ToUpper());
于 2012-05-29T10:29:34.210 回答
5

为什么不这样:

if (string1.IndexOf(string2, StringComparison.OrdinalIgnoreCase) >= 0)
{  
}
于 2012-05-29T10:34:38.767 回答
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);
    }
}

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

于 2012-05-29T10:31:07.117 回答
0
string1.ToUpperInvariant().Contains(string2.ToUpperInvariant());
于 2012-05-29T10:30:03.203 回答
0
Regex.IsMatch(string1,string2,RegexOptions.IgnoreCase);

这将返回布尔值.....

于 2012-05-29T10:42:29.933 回答