首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Python regexp难题

Python regexp难题
EN

Stack Overflow用户
提问于 2012-06-22 15:37:53
回答 4查看 139关注 0票数 0

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

代码如下:

代码语言:javascript
运行
AI代码解释
复制
    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行),并且包含如下代码行:

代码语言:javascript
运行
AI代码解释
复制
insert into table ...
insert into table
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-22 16:02:16

您只需要查找逐字字符串。在这种情况下,正则表达式是过度杀伤力。相反,请使用in

代码语言:javascript
运行
AI代码解释
复制
for line in f:
    for table in tables:
        # snip...
        if table in line:
            # ...
票数 3
EN

Stack Overflow用户

发布于 2012-06-22 15:54:41

我认为

代码语言:javascript
运行
AI代码解释
复制
stri2 = ".*" + table + ".*"

应该是:

代码语言:javascript
运行
AI代码解释
复制
stri2 = ".*?" + table + ".*"

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

票数 2
EN

Stack Overflow用户

发布于 2012-06-22 15:58:36

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11159477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档