Complex “Contains” string comparison

后端 未结 1 1644
暖寄归人
暖寄归人 2020-12-01 08:49

I\'m developing a C# 4.5 app and I need a function to return true for the following comparison:

\"bla LéOnAr d/o bla\".ComplexContains(\"leonardo\")

相关标签:
1条回答
  • 2020-12-01 09:08

    You could use an appropriate CompareInfo and then CompareInfo.IndexOf(string, string, CompareOptions) and check the result against -1. Sample:

    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
        }
    }
    

    Or in method form:

    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;
    }
    
    0 讨论(0)
提交回复
热议问题