2017-02-13 50 views
-4

我有一個字符串正則表達式的Regex.Replace()

string str1 = "SELECT * FROM A INNER JOIN B JOIN C JOIN A INNER JOIN B LEFT JOIN C"; 

我想更換JOIN沒有跟着INNERLEFT等與\ nJOIN

我的期望的輸出是

SELECT * FROM A INNER JOIN B \nJOIN C \nJOIN A INNER JOIN B LEFT JOIN C 

我是新手C#程序員,我想用的是

var pattern = NOT IN("INNER" || "OUTER" || "LEFT") + @"\b"+ "JOIN"; 
var output = Regex.Replace(str1, pattern, "\nJOIN", RegexOptions.IgnoreCase); 

在這裏,我堅持貫徹NOT IN(「內部」 || 「OUTER」|| 「左」)與正則表達式。

您可以在這方面幫助我。 在此先感謝。

+2

請參見[正則表達式語言 - 快速參考](https://msdn.microsoft.com/en-us/library/az24scfc(v = vs.110).aspx)。 –

+0

任何人都可以請告訴我爲什麼人們投票:(爲我指出,以便我可以編輯問題 –

+0

@WiktorStribiżew,感謝您的鏈接 –

回答

1

我認爲這是你在找什麼:

string str1 = "SELECT * FROM A INNER JOIN B JOIN C JOIN A INNER JOIN B LEFT JOIN C"; 
string result = Regex.Replace(str1, @"(?<!INNER)\s+JOIN", "\nJOIN"); 
//result: SELECT * FROM A INNER JOIN B \nJOIN C \nJOIN A INNER JOIN B LEFT \nJOIN C 

我用這個方便的網站,以瞭解如何做到這一點:regex101

記得使用在該快速參考搜索右下角找到你需要的字符或表達式(例如,我在你的案例中搜索了「Not」)

更新:使其更加健壯並允許INNER和JOIN

+0

非常感謝:) –

+0

If我只在'INNER':'INNER JOIN'之後添加一個*空格*(更不用說*註釋*:'/ * la-la-la * /')例程開始添加'\ n' –

+0

另一個計數器例子:'' string str1 =「SELECT * FROM JOINT_VENTURE」;''甚至加劇'string str1 =「SELECT * FROM [MY JOINT VENTURE]」' –

相關問題