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]");
(?=.*?\\)(?:.*?\s(.*?))\s*IN.*\\(.*?)\.(?:mdb|accdb).*?\n
Замена:
FROM [$2].$1\n
См. Демонстрацию:
Попробуйте приведенный ниже код,
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
. В замещающей части набранную группу ссылали назад, чтобы получить желаемый результат.
Попробуйте приведенный ниже код, если вы не хотите явно указывать строку TAB1
,
string result = Regex.Replace(strModifiedQuery, @"(?i)(?s)(.*?(\S+)\.key.*?)\S+\s*\S+\s*'\w:\\\w+\\\w+\\(\w+)\.(?:mdb|accdb)'", "$1[$3].$2");