Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正则表达式-如何匹配'ß';至';ss&x27;反之亦然_C#_Regex_Localization_Cultureinfo - Fatal编程技术网

C# 正则表达式-如何匹配'ß';至';ss&x27;反之亦然

C# 正则表达式-如何匹配'ß';至';ss&x27;反之亦然,c#,regex,localization,cultureinfo,C#,Regex,Localization,Cultureinfo,伙计们,我怎样才能用ss对sharp-s字符(ß)进行正则表达式匹配,反之亦然?我尝试了不变区域性,但它没有返回匹配项。但是,如果我将String.IndexOf()与不变区域性一起使用,它就能够 Console.WriteLine(“abcßßdefßghi”.IndexOf(“ssss”,StringComparison.InvariantCultureIgnoreCase)>=0); var matches=正则表达式matches(“abcßßdefßghi”、“ssss”、RegexO

伙计们,我怎样才能用
ss
对sharp-s字符(
ß
)进行正则表达式匹配,反之亦然?我尝试了不变区域性,但它没有返回匹配项。但是,如果我将
String.IndexOf()
与不变区域性一起使用,它就能够

Console.WriteLine(“abcßßdefßghi”.IndexOf(“ssss”,StringComparison.InvariantCultureIgnoreCase)>=0);
var matches=正则表达式matches(“abcßßdefßghi”、“ssss”、RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
Console.WriteLine(matches.Count);
//输出
真的
0

我需要找到比赛开始的所有索引。这样做的目的是突出显示“匹配”字符串。我正在寻找一种使用
Regex.Match()
的干净方法,这比迭代字符串和子字符串等更可取。TIA。

这可能不是您希望的答案,但在研究了一段时间后,似乎没有一个解决方案依赖于
RegexOptions
。即使将
CurrentCulture
显式设置为
de
并删除
RegexOptions.CultureInvariant
也会产生错误的结果。因为这是用<代码>索引()/<代码>工作的,所以我认为这是代码< > ReXEX <代码>库中的一个bug。 考虑到这一点,最好的解决方法可能是使用交替运算符(
|
)显式处理这两种情况:

var matches=Regex.matches(“abcdß”ẞsSSs“,“(ss|ß)”,RegexOptions.IgnoreCase);
具有讽刺意味的是,这适用于所有中立和特定的文化,即不仅是
de
de
,甚至是
ja-JP
ja
。这就是说,令人惊讶的是,它将在不变文化中失败,而不变文化不评估
ß
作为等效项。因此,如果您需要在不变区域性下运行,或者至少需要使用
RegexOptions.CultureInvariant
,那么您需要使用以下内容:

var matches=Regex.matches(“abßßßcdẞẞEFSSGHIJ“,”(ss|ẞ|ß)”,RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);

再说一次,这可能不是你想要的答案,与更复杂的正则表达式合并可能会有点复杂,但考虑到微软正则表达式库的明显局限性,这是我所能想到的最好的方法。

为了克服这种情况,我最终用
(ß|ss)
,然后对其进行查找

var cleanSearchTerm = Regex.Replace(Regex.Escape(RemoveDiacritics(searchTerm)), "ß|ss", "(ß|ss)", RegexOptions.IgnoreCase);
var matches = Regex.Matches(RemoveDiacritics(item), cleanSearchTerm, RegexOptions.IgnoreCase );

这将在包含
ß
和/或
ss

的搜索词中为
ß
ss
提供匹配,以便搜索引擎优化,夏普-s字符(
ß
)也被称为Eszett。对于那些不熟悉sharp-s字符的人来说,它的发音类似于
ss
,这两个字符在书面德语中可以互换使用,因此在解析字符串时需要能够将它们视为同义词。(
ß
在技术上更正确,但并非所有字体都支持它。)有趣的问题。而且,我很不好意思承认,我至少可以想到三种情况,我编写的本地化代码没有考虑到这一点。出于好奇,如果您明确地将区域设置为
CurrentCultureInogoreCase
,并且当前的
CultureInfo
设置为例如
de
,这是否有效?