C#-如何将第一个字母大写';仅';在一段话上?(与regex组合)
本文关键字:regex 组合 一段 第一个 C#- | 更新日期: 2023-09-27 18:23:44
所以我有一个赋值,当我输入"a.a.a"时,它的输出应该是"a.a.a",但我的输出产生的是"Aa a.a.a",而不是
这是处理逻辑的代码
private void mnuSentenize_Click(object sender, EventArgs e)
{
if (ActiveMdiChild != null)
{
frmNotepad SNTZ = (frmNotepad)ActiveMdiChild;
string Input = ((frmNotepad)ActiveMdiChild).FileContent.ToString();
var Result = (char.ToUpper(Input[0]) + (Regex.Replace(Input, @"([.]'b[a-z]|[.] 'b[a-z]|[?]'b[a-z]|[?] 'b[a-z]|[!]'b[a-z]|[!] 'b[a-z])", X => X.Value.ToUpper())));
SNTZ.FileContent = Result.ToString();
}
}
我使用regex来处理替换,但到目前为止,我没有找到一种方法来大写第一个字符,而不让额外的字符从任何地方弹出
这里有一个正则表达式,用于查找每句话中的第一个小写字符:
(?<=(?:^|'.)'s*)'p{Ll}
'p{Ll}
将匹配任何小写字母,并且查找将确保它是字符串的第一个字母,或者是句点后的第一个字符,忽略空白。
以下是使用方法:
var str = "a a.a. a";
var result = Regex.Replace(str, @"(?<=(?:^|'.)'s*)'p{Ll}", m => m.Value.ToUpper());
在线演示
对于原始代码,错误是将第一个大写字母与整个字符串的regex替换结果连接起来。请改用Regex.Replace(Input.Substring(1), ...
。您还应该检查字符串是否至少有一个字符长。
非常感谢,它起到了的作用
固定代码:
private void mnuSentenize_Click(object sender, EventArgs e)
{
if (ActiveMdiChild != null)
{
frmNotepad SNTZ = (frmNotepad)ActiveMdiChild;
string Input = ((frmNotepad)ActiveMdiChild).FileContent.ToString();
var Result = Regex.Replace(Input, @"((?<=(?:^|'.)'s*)'p{Ll}|[.]'b[a-z]|[.] 'b[a-z]|[?]'b[a-z]|[?] 'b[a-z]|[!]'b[a-z]|[!] 'b[a-z])", X => X.Value.ToUpper());
SNTZ.FileContent = Result.ToString();
}
}