Caseinvariant在较长的字符串中搜索字符串的一部分

时间:2016-03-08 16:51:38

标签: c# string

我有一堆字符串,例如

string s1 = "abc";  string s2="def"; string s3="ghi";

然后我还有其他一些字符串:

string findMe = "12ABC34";

我想返回True,因为findMe abc “)的不区分大小写确实存在于s1; < / p>

我尝试使用s1,s2,s3制作字符串列表或串联字符串,并使用.Contains.IndexOf来解决问题,但是包含没有IgnoreCase选项和IndexOf无法进行部分搜索。

2 个答案:

答案 0 :(得分:1)

您的findMe包含多个模式存在问题,因为您必须遍历它,但没有更多限制,您最终会匹配“a”,因为您没有指定findMe包含多个的显式格式要查找的字符串。我使用Regex.IsMatch()来匹配并忽略大小写。这是我目前的实施:

        string s1 = "abc"; string s2 = "def"; string s3 = "ghi";
        string findMe = "12ABC34";

        for (var windowSize = 1; windowSize <= findMe.Length; windowSize++)
        {
            for (var startIndex = 0; startIndex <= findMe.Length; startIndex++)
            {
                if (startIndex + windowSize <= findMe.Length)
                {
                    var findMeSubstring = findMe.Substring(startIndex, windowSize);
                    //Console.WriteLine(findMeSubstring);
                    foreach (var s in new List<string>() { s1, s2, s3 })
                    {
                        if (Regex.IsMatch(s,findMeSubstring, RegexOptions.IgnoreCase))
                        { /*return true;*/ Console.WriteLine($"Pattern {findMeSubstring} found in string {s}."); }
                    }
                }
            }
        }

打印:

Pattern A found in string abc.
Pattern B found in string abc.
Pattern C found in string abc.
Pattern AB found in string abc.
Pattern BC found in string abc.
Pattern ABC found in string abc.

答案 1 :(得分:0)

您可以使用IndexOf()重载,它需要ComparisonType枚举和传递OrdinalIgnoreCase来进行不区分大小写的比较:

string s1 = "abc";
string findMe = "12ABC34";

var index = findMe.IndexOf(s1, StringComparison.OrdinalIgnoreCase);

并在索引上使用if条件以查看它是否 -1 ,然后在findMe字符串中找到您的字符串。

if(index >= 0)
   // match found

由于您希望将所有字符串匹配在一起,在这种情况下,您必须为字符串创建一个列表,然后将All()IndexOf()组合使用,如:

string s1 = "abc";  string s2="def"; string s3="ghi";
List<string> inputs = new List<string>(){s1,s2,s3};
string findMe = "12ABC34";
if(inputs.All(x=> findeMe.IndexOf(x) >=0))
{
    // s1, s2,s3 found in findMe string  
}