c#

时间:2015-06-08 13:32:56

标签: c# regex

我想在“句子案例”中更改字符串的大小写。我已经使用了这个功能:

private string toSentenceCase(string sourcestring)
{
    var lowerCase = sourcestring.ToLower();

    lowerCase = Regex.Replace(lowerCase, @"(\r\n|\n\r|\n|\r)", "\r\n");
    var r = new Regex(@"(^[a-z])|[?!.\r\n]\s+(.)", RegexOptions.Multiline | RegexOptions.ExplicitCapture);
    var result = r.Replace(lowerCase, s => s.Value.ToUpper());

    return result;
} 

用我的正则表达式我想抓住'。','?','!'还有'\ n'和'\ r'。我的代码工作,除非句子之间没有“空格”字符。 例如 “第一个例子。有空白区域。”成为“第一个例子。有白色空间。” 但 “第二个例子。有白色空间。”仍然是“第二个例子。有空白。”

关于如何更改我的正则表达式以捕获第二个示例的任何想法?

1 个答案:

答案 0 :(得分:2)

只需将\s+转为\s*,因为\s+必须包含\s*赢得

t的空格字符。

var r = new Regex(@"(^[a-z])|[?!.\r\n]\s*(.)", RegexOptions.Multiline | RegexOptions.ExplicitCapture);

var r = new Regex(@"(?:^|[?!.\r\n])\s*([a-z])", RegexOptions.Multiline | RegexOptions.ExplicitCapture);