我有一个
的字符串string mainstr = "NONSALE_REVENUE,SALE_REVENUE";
我正在尝试将NONSALE_REVENUE
替换为SUM(NONSALE_REVENUE)
,将SALE_REVENUE
替换为SUM(SALE_REVENUE)
我试过的是:
mainstr = mainstr.Replace("SALE_REVENUE", "SUM(SALE_REVENUE)");
mainstr = mainstr.Replace("NONSALE_REVENUE", "SUM(NONSALE_REVENUE)");
这给了我错误的结果:
NONSUM(SALE_REVENUE,SUM(SALE_REVENUE
我的预期结果为SUM(NONSALE_REVENUE),SUM(SALE_REVENUE)
我怎样才能做到这一点?
答案 0 :(得分:5)
您可以使用,
字符来检测单个值
string mainstr = "NONSALE_REVENUE,SALE_REVENUE";
string result = string.Join(",", mainstr.Split(',').Select(x => "SUM("+ x + ")"));
答案 1 :(得分:3)
您可以使用RegEx
实现此目的string mainstr = "NONSALE_REVENUE,SALE_REVENUE";
string newString = Regex.Replace(mainstr, @"\bNONSALE_REVENUE\b", "SUM(NONSALE_REVENUE)");
newString = Regex.Replace(newString, @"\bSALE_REVENUE\b", "SUM(SALE_REVENUE)");
Console.WriteLine(newString);
答案 2 :(得分:3)
单个正则表达式替换步骤:
Regex.Replace(mainstr, @"(?:NON)?SALE_REVENUE", "SUM($&)")
如果您想确保替换整个单词,请将模式用\b
(单词边界)括起来:
Regex.Replace(mainstr, @"\b(?:NON)?SALE_REVENUE\b", "SUM($&)")
或者,如果仅匹配逗号之间的子字符串和/或字符串的开头/结尾很重要,请使用
Regex.Replace(mainstr, @"(?<![^,])(?:NON)?SALE_REVENUE(?![^,])", "SUM($&)")
其中(?<![^,])
是一个负面的lookbehind,它不需要在左边立即使用非逗号字符,(?![^,])
是一个负向前瞻,它不需要在搜索短语的右边立即使用非逗号字符
替换模式中的$&
会在替换期间插入整个匹配项。
模式详情
\b
- 字边界或(?<![^,])
- 负面的背后隐藏,左边不需要非逗号字符(?:NON)?
- 一个可选的非捕获组,匹配1或0次NON
SALE_REVENUE
- 文字子字符串(?![^,])
- 在搜索词组右侧不需要非逗号字符的否定前瞻或\b
- (关闭)字边界。请参阅C# demo:
string mainstr = "NONSALE_REVENUE,SALE_REVENUE";
string result = Regex.Replace(mainstr, @"(?<![^,])(?:NON)?SALE_REVENUE(?![^,])", "SUM($&)");
Console.WriteLine(result);
答案 3 :(得分:1)
如果mainstr
始终将是"NONSALE_REVENUE,SALE_REVENUE"
,那么请使用逗号作为替换操作的一部分,所以请使用:
mainstr = mainstr.Replace(",SALE_REVENUE", ",SUM(SALE_REVENUE)");
mainstr = mainstr.Replace("NONSALE_REVENUE,", "SUM(NONSALE_REVENUE),");
答案 4 :(得分:1)
使用Regex.Replace
:
string mainstr = "NONSALE_REVENUE,SALE_REVENUE";
string result = Regex.Replace(mainstr, @"\b\w+\b", "SUM($0)");