RegEx在字符串中查找字符串

时间:2012-01-12 10:31:58

标签: c# .net regex

我是否可以使用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中完成。

5 个答案:

答案 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 ++屏幕的样子并相信我,它已经有效了。

enter image description here

答案 3 :(得分:0)

您可以使用parantheses从匹配的字符串中捕获子字符串:

^ *INSERT\s+INTO\s+(\w+)

根据匹配结果,您可以使用\1$1根据您的语言提取首个捕获的群组。

*\s+将忽略额外的空格。

答案 4 :(得分:0)

在php中

$regex = "/INSERT INTO (.*) VALUES/";

在java中

String regex = "INSERT INTO (.*?) VALUES";

第一个捕获组将保留您想要的内容。