使用正则表达式修改查询?

时间:2014-08-28 11:52:58

标签: c# regex

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

  (?=.*?\\)(?:.*?\s(.*?))\s*IN.*\\(.*?)\.(?:mdb|accdb).*?\n

要做的替换:

  FROM [$2].$1\n

参见演示:

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