所以当我输入" a.a时,我有一个作业。 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();
}
}
我使用正则表达式来处理替换,但到目前为止还没有找到一种方法来大写第一个字符而不会从另一个地方弹出额外的字符
答案 0 :(得分:0)
这是一个正则表达式,用于在每个句子中找到第一个小写字符:
(?<=(?:^|\.)\s*)\p{Ll}
\p{Ll}
将匹配任何小写字母,并且lookbehind将确保它是字符串的第一个字母,或句点后的第一个字母,忽略空格。
以下是如何使用它:
var str = "a a.a. a";
var result = Regex.Replace(str, @"(?<=(?:^|\.)\s*)\p{Ll}", m => m.Value.ToUpper());
对于原始代码,您的错误是您将大写的第一个字母与整个字符串的正则表达式替换结果连接起来。请尝试使用Regex.Replace(Input.Substring(1), ...
。您还应该检查字符串是否至少有一个字符长。
答案 1 :(得分:0)
非常感谢,它有效
固定代码:
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();
}
}