复杂的"包含"字符串比较

Leo*_*rdo 14 c# string-comparison

我正在开发一个C#4.5应用程序,我需要一个函数来返回true以进行以下比较:

"blaLéOnArd/ o bla".ComplexContains("leonardo")

换句话说,我string.Compare(str1, str2, CultureInfo.InvariantCulture, CompareOptions.IgnoreCase | CompareOptions.IgnoreSymbols | CompareOptions.IgnoreNonSpace)还需要检查"包含!

有人可以帮忙吗?

Jon*_*eet 33

您可以使用适当的CompareInfo然后CompareInfo.IndexOf(string, string, CompareOptions)并检查-1的结果.样品:

using System;
using System.Globalization;

class Program
{
    static void Main()
    {
        var compareInfo = CultureInfo.InvariantCulture.CompareInfo;
        var options = CompareOptions.IgnoreCase | 
            CompareOptions.IgnoreSymbols |
            CompareOptions.IgnoreNonSpace;

        var haystack = "bla Lé OnAr d/o bla";
        var needle = "leonardo";

        var index = compareInfo.IndexOf(haystack, needle, options);
        Console.WriteLine(index); // 4
    }
}
Run Code Online (Sandbox Code Playgroud)

或者以方法形式:

private static bool ComplexContains(string source, string value)
{
    var index = CultureInfo.InvariantCulture.CompareInfo.IndexOf
        (source, value, CompareOptions.IgnoreCase | 
         CompareOptions.IgnoreSymbols | CompareOptions.IgnoreNonSpace);
    return index != -1;
}
Run Code Online (Sandbox Code Playgroud)

  • @Leonardo:我非常怀疑它能否完全解决这个问题-我不希望这样。(以后,请在原始问题中提供*关键*的详细信息。) (2认同)