Python正则表达式难题

时间:2012-06-22 15:37:53

标签: python sql regex

我试图将一个巨大的SQL文件分解成一个小的sql文件,我正在使用python来实现这一点,但是我使用的代码与我在google上看到的代码不匹配。< / p>

以下是代码:

    import sys, re
    p = [0]
    f = open('/root/testsql/data.sql', 'r')
    tables =["tabel1", "table2"]
    contor = 0;
    con = 0;

    for line in f:
        for table in tables:
            stri = "root/testsql/" + str(con)
            con = con + 1
            stri2 = ".*" + table + ".*"
            if re.match(stri2,line):
                    print table
                    f2 = open(stri,"w")
                    f2.write(line)
                    f2.close()

如果有人知道为什么re.match不起作用,我们将非常感激。

sql文件很长(73595行),包含如下行:

insert into table ...
insert into table

4 个答案:

答案 0 :(得分:3)

你只是在寻找逐字字符串。在这种情况下,正则表达式是过度的。相反,请使用in

for line in f:
    for table in tables:
        # snip...
        if table in line:
            # ...

答案 1 :(得分:2)

我认为

stri2 = ".*" + table + ".*"

应该是:

stri2 = ".*?" + table + ".*"

。*是贪心并且会匹配整行。

答案 2 :(得分:1)

您应该使用re.search代替re.match,而不是将正则表达式包裹在.*中。

您看不到匹配的原因是输入以换行符结束,并且点元字符与换行符不匹配。

答案 3 :(得分:0)

我会在任何正则表达式中使用原始字符串而不是普通字符串,以便在解释char时不会欺骗自己。

r'。*'+ table + r'。*'