我试图将一个巨大的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
答案 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'。*'