2017-02-13 4 views
-4

У меня есть строкаRegex модели в C# для Regex.Replace() в C#

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

Я хочу заменить РЕГИСТРИРУЙТЕСЬ не следует ВНУТРЕННЕЙ, СЛЕВА и т.д. с \ 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 («ВНУТРЕННЯЯ» || "ВНЕШНИЙ" || «LEFT») с RegEx.

Не могли бы вы помочь мне в этом отношении. Спасибо заранее.

+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

Не забывайте использовать быстрый ссылочный поиска в (например, я искал «Не» в вашем случае)

ОБНОВЛЕНО: чтобы сделать его более надежным и разрешить от 1 до n пробелов между INNER и JOIN

+0

Спасибо большое :) –

+0

Если только я добавляю * пространство * (не говоря уже о * комментарии *: '/ * la-la-la * /') после 'INNER':' INNER JOIN' процедура запускает добавление '\ n' –

+0

Другой пример счетчика:' string str1 = "SELECT * FROM JOINT_VENTURE"; 'или даже усугубляемый' string str1 = "SELECT * FROM [MY JOINT VENTURE]" ' –

Смежные вопросы