Nir*_*Nir 0 .net c# regex capitalization
我正在尝试寻找一种有效的方法来获取输入字符串,并在每个标点符号(. : ? !)后的空白处加上大写字母。
输入:
“我吃了点东西。但是我没有:相反,不。你怎么看?我不认为!对不起。我。”
输出:
“我吃了点东西。但是我没有:相反,不。你怎么想?我不认为!打扰我了。moi”
显而易见的是将其拆分,然后大写每个组的第一个字符,然后将所有内容连接在一起。但这是丑陋的。最好的方法是什么?(我正在考虑Regex.Replace使用MatchEvaluator首字母大写但希望获得更多想法的a)
谢谢!
快速简便:
static class Ext
{
public static string CapitalizeAfter(this string s, IEnumerable<char> chars)
{
var charsHash = new HashSet<char>(chars);
StringBuilder sb = new StringBuilder(s);
for (int i = 0; i < sb.Length - 2; i++)
{
if (charsHash.Contains(sb[i]) && sb[i + 1] == ' ')
sb[i + 2] = char.ToUpper(sb[i + 2]);
}
return sb.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
string capitalized = s.CapitalizeAfter(new[] { '.', ':', '?', '!' });
Run Code Online (Sandbox Code Playgroud)