我有一根绳子
string mainstr = "NONSALE_REVENUE,SALE_REVENUE";我试图用SUM(NONSALE_REVENUE)代替NONSALE_REVENUE,用SUM(SALE_REVENUE)代替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)
我怎样才能做到这一点?
发布于 2018-06-06 12:36:09
您可以通过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);发布于 2018-06-06 12:32:57
您可以使用, char检测单个值。
string mainstr = "NONSALE_REVENUE,SALE_REVENUE";
string result = string.Join(",", mainstr.Split(',').Select(x => "SUM("+ x + ")"));发布于 2018-06-06 12:43:12
一个正则表达式替换步骤:
Regex.Replace(mainstr, @"(?:NON)?SALE_REVENUE", "SUM($&)")如果要确保替换整个单词,请用\b (单词边界)括住该模式:
Regex.Replace(mainstr, @"\b(?:NON)?SALE_REVENUE\b", "SUM($&)")或者,如果只匹配逗号和/或字符串的开头/结尾处的子字符串很重要,请使用
Regex.Replace(mainstr, @"(?<![^,])(?:NON)?SALE_REVENUE(?![^,])", "SUM($&)")其中,(?<![^,])是一个负查找,不需要在左侧立即使用非逗号字符,而(?![^,])是一个负查找,在搜索短语的右侧不需要任何非逗号字符。
替换模式中的$&在替换期间插入整个匹配。
见regex在线演示。
模式细节
\b -一个单词边界或(?<![^,]) --一种不需要在左边立即使用非逗号字符的负面查找。(?:NON)? -可选的非捕获组匹配1或0出现的NONSALE_REVENUE -一个文字子字符串(?![^,]) -在搜索短语的右侧不需要非逗号字符的负面展望。\b -(关闭)字边界。

见C#演示
string mainstr = "NONSALE_REVENUE,SALE_REVENUE";
string result = Regex.Replace(mainstr, @"(?<![^,])(?:NON)?SALE_REVENUE(?![^,])", "SUM($&)");
Console.WriteLine(result);https://stackoverflow.com/questions/50720447
复制相似问题