Слова, помещенные после этих знаков препинания, должны быть написаны с заглавной буквы (обратите внимание, что при использовании с обеих сторон от них могут быть пробелы или специальные символы):
Тире (-), косая черта (/), двоеточие (:), точка (.), вопросительный знак (?), восклицательный знак (!), многоточие (... ИЛИ ...) (они разные)
Я как бы увяз в этой головоломке из-за всех специальных символов регулярных выражений, которые я пытаюсь буквально искать в своем поиске. Я считаю, что могу использовать Regex.Escape, хотя в этом случае я не могу заставить его работать для меня прямо сейчас.
Вот несколько примеров начальных строк, которые нужно изменить:
Change this:
This is a dash - example
To this:
This is a dash - Example <--capitalize "Example" with Regex
This is another dash -example
This is another dash -Example
This is an ellipsis ... example
This is an ellipsis ... Example
This is another ellipsis …example
This is another ellipsis …Example
This is a slash / example
This is a slash / Example
This is a question mark ? example
This is a question mark ? Example
Вот код, который у меня есть:
private static string[] postCaps = { "-", "/", ":", "?", "!", "...", "…"};
private static string ReplacePostCaps(string strString)
{
foreach (string postCap in postCaps)
{
strString = Regex.Replace(strString, Regex.Escape(postCap), "/(?<=(" + Regex.Escape(postCap) + "))./", RegexOptions.IgnoreCase);
}
return strString;
}
Большое спасибо!
2 ответа
Вам не нужно перебирать список знаков препинания, вместо этого можно просто добавить набор символов в одно регулярное выражение:
(?:[/:?!…-]|\.\.\.)\s*([a-z])
Чтобы использовать его с Regex.Replace()
:
strString = Regex.Replace(
strString,
@"(?:[/:?!…-]|\.\.\.)\s*([a-z])",
m => m.ToString().ToUpper()
);
Regex объяснил:
(?: # non-capture set
[/:?!…-] # match any of these characters
| \.\.\. # *or* match three `.` characters in a row
)
\s* # allow any whitespace between matched character and letter
([a-z]) # match, and capture, a single lowercase character
Может быть, это сработает для вас:
var phrase = "This is another dash ... example";
var rx = new System.Text.RegularExpressions.Regex(@"(?<=[\-./:?!]) *\w");
var newString = rx.Replace(phrase, new System.Text.RegularExpressions.MatchEvaluator(m => m.Value.ToUpperInvariant()));
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.