与 InvariantCultureIgnoreCase 匹配的子字符串

问题描述 投票:0回答:1

我正在尝试查找与

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
,但
RegexOptions.CultureInvariant | RegexOptions.IgnoreCase
不匹配。

那么,如何用

InvariantCultureIgnoreCase
实现子串匹配机制呢?

c# regex string ignore-case
1个回答
0
投票

您可以很高兴地使用

IndexOf
,而不是使用复杂的工具链接正则表达式:

string haystack = "123AbC123";
string needle = "abc";

int index = haystack.IndexOf(needle, StringComparison.InvariantCultureIgnoreCase);
if (index != -1)
{
    Console.WriteLine(haystack.Substring(index, needle.Length));
}
© www.soinside.com 2019 - 2024. All rights reserved.