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来处理替换,但到目前为止,我没有找到一种方法来大写第一个字符,而不让额外的字符从任何地方弹出

C#-如何将第一个字母大写';仅';在一段话上?(与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();
        }
    }