簡體   English   中英

正則表達式在字符串中替換多個單詞中的相同值

[英]Regex Replace in the string with same value in multiple words

我想用引號替換字符串。

Mystring如下所示:

var query = "SELECT abc.name,abc.owner-name FROM XXX";

我想按如下方式替換字符串。 預期結果

SELECT abc."name",abc."owner-name" FROM XXX

我正在使用正則表達式代碼如下:

Regex.Replace(query, $@"\b{column.ColumnName}\b", "\"" + column.ColumnName + "\"")

在取代以下字符串時獲得結果 -

SELECT abc."name",abc."owner-"name"

名稱是單獨的字符串,owner-name是單獨的字符串。 在嘗試替換名稱字符串時,另一個字符串會自動替換,因為第二個字符串中包含單詞name。

如果有任何解決方案,請告訴我。 提前致謝。

你需要確保較長的一個先來。 您可以創建列名列表,按降序排序,並構建一個替換組以形成正則表達式

\b(?:owner-name|owner|name)\b

看看這個正則表達式如何工作 請注意,從左到右檢查備選方案,一旦匹配,將跳過下一個備選方案。

這是一個以動態方式處理項目的片段(請參閱在線C#演示 ):

var ColumnNames = new List<string> { "owner", "name", "owner-name"};
ColumnNames = ColumnNames.OrderByDescending(x => x.Length).ToList();
var s = "SELECT abc.name,abc.owner-name FROM XXX";
var pattern = $@"\b(?:{string.Join("|", ColumnNames)})\b";
var result = Regex.Replace(s, pattern, "\"$&\"");
Console.WriteLine(result);
// => SELECT abc."name",abc."owner-name" FROM XXX

確保您正在逃避不需要的字符串/字符

\b[^-]name\b

這里轉義'-'[]內部,並匹配“ name ”,這是一個字符串

利用Regex測試程序測試表達式。

暫無
暫無

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

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