C#大写字符串,但仅在某些标点符号之后

Nir*_*Nir 0 .net c# regex capitalization

我正在尝试寻找一种有效的方法来获取输入字符串,并在每个标点符号(. : ? !)后的空白处加上大写字母。

输入:

“我吃了点东西。但是我没有:相反,不。你怎么看?我不认为!对不起。我。”

输出:

“我吃了点东西。但是我没有:相反,不。你怎么想?我不认为!打扰我了。moi”

显而易见的是将其拆分,然后大写每个组的第一个字符,然后将所有内容连接在一起。但这是丑陋的。最好的方法是什么?(我正在考虑Regex.Replace使用MatchEvaluator首字母大写但希望获得更多想法的a)

谢谢!

dig*_*All 5

快速简便:

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)