Я создаю компонент форматирования текста .NET, который использует список настраиваемых регулярных выражений для преобразования входного текста. Мне также нужно разрешить преобразование регистра с использованием правил регулярных выражений, но я не могу понять, как это сделать в .NET. Выражение замены в стиле Perl, такое как s/(\b)([a-z])/\1\u\2/g, поможет, но .NET, похоже, не поддерживает его. Я знаю, что могу использовать MatchEvaluator с делегатом, но мне нужно, чтобы мои правила замены можно было настраивать (текст).
Любая помощь была бы признательна.
1 ответ
Самый .NET-стиль был бы
var regex = new Regex(@"^(?<first>.*?):(?<second>.*)$", RegexOptions.Compiled);
Console.WriteLine(regex.Replace("moon:glow", "${second}:${first}"));
Напечатаю
glow:moon
Вы также можете использовать порядковые ссылки, например:
Console.WriteLine(regex.Replace("moon:glow", "$2:$1"));
Смешивать их нормально.
В отличие от Perl, вы можете индивидуально получить все совпадающие значения для повторяющихся атомов, например, например:
var regex = new Regex(@"^((?<token>.*?):)*", RegexOptions.Compiled);
foreach (Capture token in regex
.Match("moon:glow:is:the most:beautiful:thing")
.Groups["token"].Captures)
Console.WriteLine(token.Value);
Выход
moon
glow
is
the most
beautiful
Чтобы получить сложную оценку соответствия, вы должны сделать, например.
var upper = Regex.Replace("moon:glow:is:the most:beautiful:thing", "(.*?)(:|$)",
m => m.Groups[1].Value.ToUpper() + m.Groups[2]);
Console.WriteLine(upper);
К сожалению, я не вижу простого способа настроить такую функцию оценки только как текст (за исключением случаев использования компилятора в качестве службы, которая, как я знаю, доступна в Mono, но я еще не совсем уверен в MS .Net)
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.
can't do any logic
может быть просто слишком резким, но да, преобразование регистра не может быть сделано