我想在“句子案例”中更改字符串的大小写。我已经使用了这个功能:
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'。我的代码工作,除非句子之间没有“空格”字符。 例如 “第一个例子。有空白区域。”成为“第一个例子。有白色空间。” 但 “第二个例子。有白色空间。”仍然是“第二个例子。有空白。”
关于如何更改我的正则表达式以捕获第二个示例的任何想法?
答案 0 :(得分:2)
只需将\s+
转为\s*
,因为\s+
必须包含\s*
赢得
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);