0

我正在尝试将一个巨大的 SQL 文件分解为一个小的 sql 文件,并且我正在使用 python 来实现这一点,但是我使用的代码不匹配,并且从我在谷歌上看到的应该是。

这是代码:

    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

4 回答 4

3

您只是在寻找逐字字符串。在这种情况下,正则表达式是多余的。相反,使用in

for line in f:
    for table in tables:
        # snip...
        if table in line:
            # ...
于 2012-06-22T16:02:16.017 回答
2

我认为

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

应该:

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

.* 是贪婪的,将匹配整行。

于 2012-06-22T15:54:41.333 回答
1

您应该使用re.searchre.match不是将正则表达式包装在.*.

您看不到匹配项的原因是输入以换行符结尾,而点元字符与换行符不匹配。

于 2012-06-22T15:58:35.763 回答
0

我会在任何正则表达式中使用原始字符串而不是纯字符串,这样您就不会在 char 被解释时自欺欺人。

r'.*' + 表格 + r'.*'

于 2012-06-22T16:20:52.220 回答