我正在尝试查找与
InvariantCultureIgnoreCase
匹配的子字符串。
例如,在“123AbC123”中查找“abc”应返回“AbC”。
为此,我尝试使用正则表达式:
static string IgnoreCaseMatch(string substring, string str)
{
var match = Regex.Match(str, Regex.Escape(substring), RegexOptions.CultureInvariant | RegexOptions.IgnoreCase);
if (match.Success)
{
return match.Groups[0].Value;
}
return null;
}
但是当我尝试一些复杂的示例时,例如
IgnoreCaseMatch("ff", "FF")
我得到 null
而不是 FF
,而 string.Equals("ff", "FF", StringComparison.InvariantCultureIgnoreCase)
返回 true
。
这意味着与
InvariantCultureIgnoreCase
的字符串比较知道 ff
在不同情况下实际上是 FF
,但 RegexOptions.CultureInvariant | RegexOptions.IgnoreCase
不匹配。
那么,如何用
InvariantCultureIgnoreCase
实现子串匹配机制呢?
您可以很高兴地使用
IndexOf
,而不是使用复杂的工具链接正则表达式:
string haystack = "123AbC123";
string needle = "abc";
int index = haystack.IndexOf(needle, StringComparison.InvariantCultureIgnoreCase);
if (index != -1)
{
Console.WriteLine(haystack.Substring(index, needle.Length));
}