Изменить запрос с помощью регулярного выражения?

1
string strModifiedQuery  = "SELECT TAB1.Key
FROM TAB1 IN 'C:\TEST\SAMPLE\HELLO.mdb'
ORDER BY TAB1.Key;"

Я хочу изменить указанный выше запрос следующим образом: [HELLO]

string strModifiedQuery  = "SELECT TAB1.Key
FROM [HELLO].TAB1
ORDER BY TAB1.Key;"

Я попытался использовать следующее регулярное выражение; но не мог прийти к правильному.

string pattern3 = @"(?i)'\w\:\\\w+\\\w+\\\w+.(mdb|accdb)'";
strModifiedQuery = Regex.Replace(strModifiedQuery, pattern3, @"[$0]");
  • 1
    Что, если вы решите это без регулярных выражений (как только вы не сможете с этим легко справиться)?
Теги:

2 ответа

0
Лучший ответ
  (?=.*?\\)(?:.*?\s(.*?))\s*IN.*\\(.*?)\.(?:mdb|accdb).*?\n

Замена:

  FROM [$2].$1\n

См. Демонстрацию:

http://regex101.com/r/nR2kU8/1

  • 0
    Спасибо вам обоим. Выражение лица VKS подходит точно.
0

Попробуйте приведенный ниже код,

string strModifiedQuery  = @"SELECT TAB1.Key
FROM TAB1 IN 'C:\TEST\SAMPLE\HELLO.mdb'
ORDER BY TAB1.Key;";
string result = Regex.Replace(strModifiedQuery, @"(?i)(?s)(.*?)\S+\s*\S+\s*'\w:\\\w+\\\w+\\(\w+)\.(?:mdb|accdb)'", "$1[$2].TAB1");
Console.WriteLine(result);
Console.ReadLine();

(?i) включить режим, нечувствительный к регистру, и модификатор DOTALL (?s) делает точку в регулярном выражении совпадающей с символом новой строки. Вышеупомянутое регулярное выражение будет соответствовать двум словам, которые находятся непосредственно перед контуром до конца строки, а также захватывает символы слова, которые были только что до строки .mdb. В замещающей части набранную группу ссылали назад, чтобы получить желаемый результат.

IDEONE

Попробуйте приведенный ниже код, если вы не хотите явно указывать строку TAB1,

string result = Regex.Replace(strModifiedQuery, @"(?i)(?s)(.*?(\S+)\.key.*?)\S+\s*\S+\s*'\w:\\\w+\\\w+\\(\w+)\.(?:mdb|accdb)'", "$1[$3].$2");

IDEONE

Ещё вопросы

Сообщество Overcoder
Наверх
Меню