C# - 如何将段落的首字母"仅"大写?(结合正则表达式)



所以我有一个赋值,当我输入"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();
        }
    }

最新更新