Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >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

复制
相关文章

相似问题

在前端提交新记录后如何重定向到索引?[Rubymine 2020.2.3,Ruby.2.7.2p137,gem 3.1.2]

127

关联表的外键

218

EF不从表中的外键生成外键关联

31

表与自身的外键/关联?

10

在关联表上查询外键

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档