簡體   English   中英

防止用逗號分隔的字符串替換已經替換的字符串

[英]Prevent replacing an already replaced string in comma-separated string

我有一個字符串

string mainstr = "NONSALE_REVENUE,SALE_REVENUE";

我試圖取代NONSALE_REVENUESUM(NONSALE_REVENUE)SALE_REVENUESUM(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)

我怎樣才能做到這一點?

您可以使用,焦炭檢測單值

string mainstr = "NONSALE_REVENUE,SALE_REVENUE";
string result = string.Join(",", mainstr.Split(',').Select(x => "SUM("+ x + ")"));

您可以使用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);

單個正則表達式替換步驟:

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 - 單詞邊界或
  • (?<![^,]) - 一個負面的lookbehind,它不需要在左邊立即使用非逗號字符
  • (?:NON)? - 可選的非捕獲組,匹配1或0次NON
  • SALE_REVENUE - 文字子字符串
  • (?![^,]) - 一個負向前瞻,在搜索短語的右邊不需要非逗號字符或
  • \\b - (結束)字邊界。

在此輸入圖像描述

查看C#演示

string mainstr = "NONSALE_REVENUE,SALE_REVENUE";
string result = Regex.Replace(mainstr, @"(?<![^,])(?:NON)?SALE_REVENUE(?![^,])", "SUM($&)");
Console.WriteLine(result);

如果mainstr 總是 "NONSALE_REVENUE,SALE_REVENUE" ,那么使用逗號作為替換操作的一部分,所以使用:

mainstr = mainstr.Replace(",SALE_REVENUE", ",SUM(SALE_REVENUE)");
mainstr = mainstr.Replace("NONSALE_REVENUE,", "SUM(NONSALE_REVENUE),");

使用Regex.Replace

string mainstr = "NONSALE_REVENUE,SALE_REVENUE";
string result = Regex.Replace(mainstr, @"\b\w+\b", "SUM($0)");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM