我的代碼中有兩種情況:
- 僅包含名稱且最后一項沒有名稱的字串(“,CPA,CFA”)。例如,“John, Jan, Joe”,我使用下面的代碼將最后一個逗號替換為“John, Jan and Joe”
- 一個字串,由名稱和末尾的 CPA/CFA 名稱 (", CPA, CFA") 組成,例如"John, Jan, Joe, CPA, CFA"。在這種情況下,我需要將第三個逗號替換為并獲得"John, Jan, and Joe, CPA, CFA"。我只需要處理第三個逗號到末尾的情況。我會注意到這些只是示例字串,實際上它可以包含更多名稱(即,它可以是“jake, jan, joe, john, jessie”)但最終我只是檢查那個姓氏是否有指定(額外的逗號)和如果是這樣,它應該通過僅添加 and 替換倒數第三個逗號來解決它。
我的目標是正確地將 and 添加到逗號分隔串列中的最后一項,以遵循標準的英語慣例。最后一項的指定逗號拋棄了我用來添加最后一項并替換逗號的正則運算式。
我的代碼:
if(str1.EndsWith(", CPA, CFA"))
{
//need to figure out
}
else
{
Regex.Replace(str1, ", ([^,] )$", " and $1");
}
uj5u.com熱心網友回復:
您可以使用具有 2 個捕獲組的模式來捕獲第一個逗號并匹配第二個逗號
替換使用2組$1 and $2
([^\s,] ),\s*([^\s,] (?:, CPA, CFA)?)$
模式匹配:
([^\s,] )
捕獲組 1,匹配 1 非空白字符和逗號,\s*
匹配逗號和可選的空白字符(
捕獲組 2[^\s,]
匹配除空格字符或逗號之外的 1 個字符(?:, CPA, CFA)?
可選匹配, CPA, CFA
)
關閉組 2$
字串結束
正則運算式演示| C# 演示
例子
string pattern = @"([^\s,] ),\s*([^\s,] (?:, CPA, CFA)?)$";
string input = "John, Jan, Joe\nJohn, Jan, Joe, CPA, CFA\njake, jan, joe, john, jessie, jack, jones";
Console.WriteLine(Regex.Replace(input, pattern, @"$1 and $2", RegexOptions.Multiline));
輸出
John, Jan and Joe
John, Jan and Joe, CPA, CFA
jake, jan, joe, john, jessie, jack and jones
uj5u.com熱心網友回復:
您可以使用以下代碼而不使用Regex
//string input = "John, Jan, Joe, CPA, CFA";
string input = "John, Jan, Joe";
var result = input.Select((b, i) => b.Equals(',') ? i : -1).Where(i => i != -1).ToList();
if(input.EndsWith(", CFA"))
input=input.Replace(input.Substring(0,result[result.Count()-3] 2), input.Substring(0, result[result.Count()-3] 2) "and ");
else
input = input.Replace(input.Substring(0, result[result.Count()-1] 1), input.Substring(0, result[result.Count()-1]) " and ");
Console.WriteLine(input);
如果string input = "John, Jan, Joe, CPA, CFA"
:
結果:“John, Jan, and Joe, CPA, CFA”(顯然,您添加了一個額外的逗號)
如果 string input = "John, Jan, Joe"
;
結果:約翰、簡和喬
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/522305.html
標籤:C#正则表达式asp.net 核心