我有一堆字符串,例如
string s1 = "abc"; string s2="def"; string s3="ghi";
然后我还有其他一些字符串:
string findMe = "12ABC34";
我想返回True
,因为findMe
( abc “)的不区分大小写确实存在于s1; < / p>
我尝试使用s1,s2,s3
制作字符串列表或串联字符串,并使用.Contains
或.IndexOf
来解决问题,但是包含没有IgnoreCase
选项和IndexOf
无法进行部分搜索。
答案 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
}