RegEx поиск двух строк шаблона и вырезать то, что между - PullRequest
0 голосов
/ 05 октября 2009

Я пытаюсь написать маленький помощник SQL. У меня есть такой запрос, хранящийся в строке:

DECLARE @V1 INT

--ignore
DECLARE @V11 INT
DECLARE @V12 INT
--endignore

DECLARE @V2 INT

--ignore
SELECT * FROM SampleTable
INNER JOIN AnotherSampleTable
......
--endignore

SELECT * From Employee ORDER BY LastName

Мой вспомогательный метод должен обрезать все, что находится между

--ignore

и

--endignore

Строка результата должна выглядеть следующим образом:

DECLARE @V1 INT

DECLARE @V2 INT


SELECT * From Employee ORDER BY LastName

Как можно достичь моего результата с RegEx?

Ответы [ 2 ]

3 голосов
/ 05 октября 2009

Вот краткий пример:

using System;
using System.Text.RegularExpressions;

class Test
{
    static void Main(string[] args)
    {
        string x = @"
A
--ignore
B
--endignore
C";
        Regex regex = new Regex("\r\n--ignore.*?\r\n--endignore\r\n", 
                                RegexOptions.Singleline);
        string y = regex.Replace(x, "\r\n");
        Console.WriteLine(y);
    }
}

Обратите внимание на использование RegexOptions.Singleline , чтобы . соответствовало любому символу, включая \n.

Я использовал здесь разделители строк Windows, но вы можете сделать возврат каретки необязательным, если хотите иметь возможность работать с разделителями Unix. Я хотел убедиться, что токены находятся на своих собственных линиях, чтобы избежать любых мошеннических ссылок в SQL, даже если это очень маловероятно.

1 голос
/ 05 октября 2009

Сопоставьте вашу строку с "--ignore. + - endignore" и используйте string.replace, чтобы заменить ее на string.empty.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...