[英]Using regex.replace() to add to ", and "to the third to last comma in a string
我的代码中有两种情况:
我的目标是将 and 正确添加到逗号分隔列表中的最后一项,以遵循标准的英语惯例。 最后一项的指定逗号脱离了我用来添加最后一项并替换逗号的正则表达式。
我的代码:
if(str1.EndsWith(", CPA, CFA"))
{
//need to figure out
}
else
{
Regex.Replace(str1, ", ([^,]+)$", " and $1");
}
您可以在不使用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"
;
结果:约翰、简和乔
您可以使用带有 2 个捕获组的模式捕获第一个逗号并匹配第二个逗号
替换使用 2 组$1 and $2
([^\s,]+),\s*([^\s,]+(?:, CPA, CFA)?)$
模式匹配:
([^\s,]+)
捕获组 1 ,匹配 1+ 个非空白字符和一个逗号
,\s*
匹配逗号和可选的空白字符
(
捕获组 2
[^\s,]+
匹配除空白字符或逗号以外的 1+ 个字符(?:, CPA, CFA)?
可选择匹配, CPA, CFA
)
关闭第 2 组
$
字符串结束
例子
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));
Output
John, Jan and Joe
John, Jan and Joe, CPA, CFA
jake, jan, joe, john, jessie, jack and jones
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.