Case Insensitive comparison in C#
本问题已经有最佳答案,请猛点这里访问。
我用下面的代码比较两个字符串
字符串1.contains(字符串2)
但是我没有得到不区分大小写搜索的结果。而且我不能用字符串。比较一下,因为我不想匹配整个名字,因为名字很大。我需要进行不区分大小写的搜索,搜索文本可以是string1包含的任何长度。
例如,术语是名称。我在文本框中输入"erm",得到结果。但是当我输入"term"时,我没有得到任何结果。有人能帮我吗:)
或者,对于包含
我更喜欢这样的扩展方法。
1 2 3 4 5 6 7 8 9 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; } } |
请注意,通过这种方式,您可以避免在大小写中进行代价高昂的转换。
可以使用此语法调用扩展
1 2 | bool result ="This is a try".Contains("TRY", StringComparison.InvariantCultureIgnoreCase); Console.WriteLine(result); |
请注意:上述扩展(对于每个扩展方法为true)应在非嵌套、非泛型静态类内定义,请参阅msdn-ref
将两个字符串都转换为相同的大小写,可以是大写的,也可以是小写的。
1 | string1.ToUpper().Contains(string2.ToUpper()); |
为什么不这样:
1 2 3 | if (string1.IndexOf(string2, StringComparison.OrdinalIgnoreCase) >= 0) { } |
1 | Regex.IsMatch(string1,string2,RegexOptions.IgnoreCase); |
这将返回布尔值…..
可以将两个字符串都转换为大写,也可以使用正则表达式:
1 2 3 4 5 6 7 8 9 10 | 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); } } |
请注意,如果使用正则表达式,则应转义搜索字符串,以便逐字解释特殊的regex字符。
1 | string1.ToUpperInvariant().Contains(string2.ToUpperInvariant()); |