忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT HPC论坛 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 807 | 回复: 3

请教一个python 正则匹配的问题 [复制链接]

论坛徽章:
0
发表于 2017-05-22 10:49 |显示全部楼层
有以下文本,我想匹配以# at 开头 第二行 #日期开头 第三行 SET 开头的第四行 ALTER |CREATE 开头,中间有可能有若干换行语句,最后以/*!*/; 结尾多行匹配


这是我写的 Python 正则表达式,但是只能匹配到 ALTER 或者 Create 那一行,下面的多个换行就匹配不到,求帮忙解决


re.compile(r'^# at.*\d*\n^#\d+.*\n^SET.*\n(?:^CREATE|^ALTER).*(?:\n^.*)?', re.I|re.M)


# at 19342
#170522 10:21:45 server id 1  end_log_pos 19679 CRC32 0x7e50a16d         Query        thread_id=76        exec_time=0        error_code=0
SET TIMESTAMP=1495419705/*!*/;
CREATE DEFINER=`root`@`%` PROCEDURE `p1`(num int(11))
BEGIN
  DECLARE cn int(11) DEFAULT 1;
  Start TRANSACTION;
  while cn< num do
    insert INTO t1 VALUES(cn,CONCAT('user',cn),CONCAT('job',@cn));
    SET cn = cn +1;
  END WHILE;
  COMMIT;
  END
/*!*/;
# at 1036578
#170522 10:26:35 server id 1  end_log_pos 1036821 CRC32 0x8a2701f9         Query        thread_id=76        exec_time=0        error_code=0
SET TIMESTAMP=1495419995/*!*/;
CREATE TABLE user_info (
        id INT (11) auto_increment PRIMARY KEY,
        user_name VARCHAR (30) NOT NULL DEFAULT '',
        create_time TIMESTAMP DEFAULT NOW()
) ENGINE = INNODB
/*!*/;

# at 1336192
#170522 10:31:45 server id 1  end_log_pos 1336324 CRC32 0x97d75f95         Query        thread_id=76        exec_time=0        error_code=0
SET TIMESTAMP=1495420305/*!*/;
ALTER table t1 MODIFY jobs VARCHAR(20) NOT NUll DEFAULT ''
/*!*/;
# at 1336324
#170522 10:32:18 server id 1  end_log_pos 1336396 CRC32 0x1cbdc09e         Query        thread_id=76        exec_time=0        error_code=0
SET TIMESTAMP=1495420338/*!*/;
BEGIN
/*!*/;

论坛徽章:
28
酉鸡
日期:2014-05-04 10:03:482015年迎新春徽章
日期:2015-03-04 09:58:112015年亚洲杯纪念徽章
日期:2015-03-20 14:40:232015亚冠之阿尔纳斯尔
日期:2015-06-02 18:59:042015亚冠之阿尔希拉尔
日期:2015-06-30 15:22:572015亚冠之大阪钢巴
日期:2015-07-20 10:44:332015亚冠之阿尔纳斯尔
日期:2015-10-28 14:57:5215-16赛季CBA联赛之新疆
日期:2015-12-25 10:18:45黑曼巴
日期:2016-06-26 21:39:5315-16赛季CBA联赛之山西
日期:2016-07-25 21:54:2715-16赛季CBA联赛之北京
日期:2016-10-27 12:07:2315-16赛季CBA联赛之八一
日期:2017-07-07 16:39:09
发表于 2017-05-23 15:54 |显示全部楼层
回复 1# 归去也无风雨也无晴


  1. import re
  2. with open ('file.txt') as f:
  3.         l=f.read()
  4. for n,i in enumerate(l.split('\n/*!*/;')):
  5.         l=i.split('\n')
  6.         if not n:
  7.                 l.insert(0,'')
  8.         if len(l)>4 and re.match(r'^# ',l[1]) and re.match(r'^#\d{5}',l[2]) and re.match('^SET',l[3])and re.match('^(CREATE|ALTER)',l[4]):
  9.                 print "\n".join(l)+"\n/*!*/;"
复制代码

论坛徽章:
0
发表于 2017-05-25 13:39 |显示全部楼层
回复 2# zxy877298415

谢谢你,提供了一个很好的思路!

论坛徽章:
0
发表于 2017-06-12 23:11 |显示全部楼层
归去也无风雨也无晴 发表于 2017-05-25 13:39
回复 2# zxy877298415

谢谢你,提供了一个很好的思路!

加我们的群问效率更高,这个群是一群工程师组建的面向初学者的
Python Linux 学习群, qq 群号: 278529278 ,
Php Linux 学习群, qq 群号: 476648701 ,
非商业性质,拒绝广告,只接收真正想学这方面技术的朋友,交流学习,申请请说明来自 ChinaUnix
来自安卓客户端来自客户端
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP