[英]C# - How to capitalize first letter 'only' on a paragraph? (Combined with regex)
所以我有一個分配,當我輸入“ a a a a a”時,它應該具有“ A aA A A”的輸出,但是我的輸出卻是“ Aa aA 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();
}
}
我使用正則表達式來處理替換,但到目前為止未能找到一種方法來大寫第一個字符而不使多余的字符突然出現
這是一個正則表達式,用於查找每個句子中的第一個小寫字符:
(?<=(?:^|\.)\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();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.