Вероятно, это не тот ответ, на который вы надеялись, но, посмотрев немного на него, похоже, не найдется решения, которое опирается на RegexOptions
. Даже явное указание CurrentCulture
на de-DE
и удаление RegexOptions.CultureInvariant
дает неверные результаты. Поскольку это работает с IndexOf()
, я бы посчитал это ошибкой в библиотеке Regex
.
Учитывая, что наилучшим обходным решением может быть явная обработка обоих сценариев ios с помощью оператора чередования (|
):
var matches = Regex.Matches("abcdßẞsSSs", "(ss|ß)", RegexOptions.IgnoreCase);
По иронии судьбы, это работает со всеми нейтральными и спецификами c культур, т. Е. Не только de-DE
и de
, но даже ja-JP
и ja
. Тем не менее, на удивление, он потерпит неудачу с инвариантной культурой, которая не оценивает ß
и ẞ
как эквивалентные. Таким образом, если вам нужно работать в инвариантной культуре - или, по крайней мере, вам нужно использовать RegexOptions.CultureInvariant
- тогда вам нужно будет использовать следующее:
var matches = Regex.Matches("abßßcdẞẞefsSsSghij", "(ss|ẞ|ß)", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
Опять же, это, вероятно, не ответ, который вы ищете, и может оказаться немного сложным для объединения с более сложными регулярными выражениями, но это лучшее, что я смог придумать, учитывая очевидные ограничения библиотеки RegEx от Microsoft.