我是否可以使用RegEx(instring of Substring)来获取字符串中的字符串?
我想从一系列INSERT语句中获取表名
INSERT INTO tableA VALUES (col1, col2, col3);
INSERT INTO tableB VALUES (col1, col2, col3);
INSERT INTO tableC VALUES (col1, col2, col3);
使用regEx我想得到(单行,因为我正在从文件中读取):
tableA
tableB
tableC
我试过这个表达式(INTO )([a-z_])*
给了我'INTO tableA',我可以使用SubString或Replace来给我剩下的,但我猜这可以在RegEx中完成。
答案 0 :(得分:2)
将此正则表达式与lookbehind一起使用:
(?i)(?<=into\s+)\S+
var tables = Regex.Matches(s, @"(?i)(?<=into\s+)\S+")
.Cast<Match>().Select(m => m.Value);
答案 1 :(得分:1)
由于您使用的是C#,我将指定从开始到结束的方式:
//create regex - the (.*?) is a capture group
var regex = new Regex("INSERT INTO (.*?) VALUES");
//mimic text lines read from a file
var sqlStrings = new string[] {"INSERT INTO tableA VALUES (col1, col2, col3)", "INSERT INTO tableB VALUES (col1, col2, col3)", "INSERT INTO tableC VALUES (col1, col2, col3)"};
foreach (var line in sqlStrings)
{
//get the first match with the regex we created
var match = regex.Match(line);
//print out the first capture group
Console.WriteLine(match.Groups[1].ToString());
}
这将写出以下内容:
tableA
tableB
tableC
不确定您的确切输入格式(换行符号)以及您想要输出的确切方式,但我希望这会有所帮助。
是的,这可以做得更简洁,但为了清楚起见,我将它分成多行和方法。
答案 2 :(得分:0)
使用文本编辑器和Find + Replace,如下所示:
Find: ^INSERT INTO (.*) VALUES.*
Replace: \1
请务必查看Regular Expression
选项。
这就是我的Notepad ++屏幕的样子并相信我,它已经有效了。
答案 3 :(得分:0)
您可以使用parantheses从匹配的字符串中捕获子字符串:
^ *INSERT\s+INTO\s+(\w+)
根据匹配结果,您可以使用\1
或$1
根据您的语言提取首个捕获的群组。
*
和\s+
将忽略额外的空格。
答案 4 :(得分:0)
在php中
$regex = "/INSERT INTO (.*) VALUES/";
在java中
String regex = "INSERT INTO (.*?) VALUES";
第一个捕获组将保留您想要的内容。