Regex-如何将“ß”匹配到“ ss”,反之亦然

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

伙计,我如何在sharp-s字符(ß)与ss上进行正则表达式匹配,反之亦然?我尝试了不变文化,但没有返回匹配结果。但是,如果我将String.IndexOf()与不变区域性一起使用,则is可以。

Console.WriteLine("abcßßdefßßghi".IndexOf("ssss", StringComparison.InvariantCultureIgnoreCase) >=0);

var matches = Regex.Matches("abcßßdefßßghi", "ssss", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
Console.WriteLine(matches.Count);

// OUTPUT
True
0

我需要找到比赛开始的所有索引。想法是突出显示“匹配”字符串。我正在寻找一种使用Regex.Match()的干净方法,它比遍历字符串和子字符串等等更好。 TIA。

c# regex localization cultureinfo
1个回答
0
投票
鉴于,最佳解决方法可能是使用交替运算符(|)显式处理两种情况:

var matches = Regex.Matches("abcdßẞsSSs", "(ss|ß)", RegexOptions.IgnoreCase);

有点讽刺的是,这适用于所有

neutral和

specific文化-即,不仅de-DEde,甚至ja-JPja。就是说,令人惊讶的是,它不会在invariant文化中失败,这种文化不会将ß视为等同。因此,如果您需要在不变文化下运行-或至少需要使用RegexOptions.CultureInvariant-那么您将需要使用以下代码:

var matches = Regex.Matches("abßßcdẞẞefsSsSghij", "(ss|ẞ|ß)", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
再次,这可能不是您要查找的答案,并且可能会发现与更复杂的正则表达式合并可能有点复杂,但是鉴于明显的局限性,这是我能够做到的最好方法微软的RegEx库。
© www.soinside.com 2019 - 2024. All rights reserved.