如何比较不区分大小写和重音不敏感的字符串

Mon*_*RPG 8 .net c# case-insensitive string-comparison accent-insensitive

如何比较不区分大小写和重音不敏感的字符串

好吧,这在SQL服务器上很容易完成

但是我想在C#.NET 4.5.1上做同样的事情.

我怎样才能以最恰当的方式做到这一点?

我的意思是这三个字符串在比较时应该返回相等

http://www.buroteknik.com/metylan-c387c4b0ft-tarafli-bant-12cm-x25mt_154202.html
http://www.buroteknik.com/METYLAN-C387C4B0FT-TARAFLI-BANT-12cm-x25mt_154202.html
http://www.buroteknik.com/METYLAN-C387C4B0FT-TARAFL?-BANT-12cm-x25mt_154202.html
Run Code Online (Sandbox Code Playgroud)

我需要一个方法,可以说下面这两个是相同的SQL服务器说它们是相同的.

 tarafli 
 TARAFL? 
Run Code Online (Sandbox Code Playgroud)

Mat*_*son 13

要忽略大小写和重音,您可以使用string.Compare()与两个IgnoreNonSpaceIgnoreCase选项,如下所示:

string s1 = "http://www.buroteknik.com/metylan-c387c4b0ft-tarafli-bant-12cm-x25mt_154202.html";
string s2 = "http://www.buroteknik.com/METYLAN-C387C4B0FT-TARAFLI-BANT-12cm-x25mt_154202.html";
string s3 = "http://www.buroteknik.com/METYLAN-C387C4B0FT-TARAFL?-BANT-12cm-x25mt_154202.html";

Console.WriteLine(string.Compare(s1, s2, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase));
Console.WriteLine(string.Compare(s2, s3, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase));
Run Code Online (Sandbox Code Playgroud)

在回答下面您的意见,这个工程的tarafliTARAFL?太.

以下代码打印0,表示字符串相等:

string s1 = "tarafli";
string s2 = "TARAFL?";
Console.WriteLine(string.Compare(s1, s2, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase));
Run Code Online (Sandbox Code Playgroud)

在这里它使用土耳其文化(我猜测正确的文化是什么).这也打印0:

string s1 = "tarafli";
string s2 = "TARAFL?";

var trlocale = CultureInfo.GetCultureInfo("tr-TR");
Console.WriteLine(string.Compare(s1, s2, trlocale, CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase));
Run Code Online (Sandbox Code Playgroud)


Yuv*_*kov 5

您可以与采用正确的和 的string.Compare重载一起使用:CultureInfoCompareOptions

string.Compare(s1, s2, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace |
                                                   CompareOptions.IgnoreCase);
Run Code Online (Sandbox Code Playgroud)

编辑:

至于你的问题CultureInfo,来自MSDN

该比较使用区域性参数来获取特定于区域性的信息,例如大小写规则和单个字符的字母顺序。例如,特定区域性可以指定将某些字符组合视为单个字符,以特定方式比较大写和小写字符,或者字符的排序顺序取决于其前面或后面的字符。