C# 中 Regex.Replace() 的正则表达式模式

Regex pattern in C# for Regex.Replace() in C#

我有一个字符串

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

我想将 JOIN 后跟 INNERLEFT 等替换为 \n加入

我想要的输出是

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); 

在这里,我坚持使用 RegEx 实现 NOT IN("INNER" || "OUTER" || "LEFT")

你能在这方面帮助我吗? 提前致谢。

我想这就是您要找的:

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 之间有 1 到 n 个空格