免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2805 | 回复: 10
打印 上一主题 下一主题

pyton使用正则表达式的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-13 11:59 |只看该作者 |倒序浏览
本帖最后由 siage 于 2012-02-13 12:12 编辑

使用python对iptables字段进行检索,在REJECT之前加入一个ACCEPT字段,可是使用正则表达式对字段进行筛选的时候,总是无法检索成功,各位大牛帮我看看,小弟是新手
  1. #!/usr/bin/env pythonimport
  2. rere_string='-A\s\w*\s-\w\s\bREJECT\b'
  3. p=re.compile(re_string)
  4. s=open('iptables','r')
  5. ip=s.readlines()for i in ip:     
  6.         if p.match(i):        
  7.              print(i)
复制代码
iptables
  1. # Firewall configuration written by system-config-firewall
  2. # Manual customization of this file is not recommended.
  3. *filter
  4. :INPUT ACCEPT [0:0]
  5. :FORWARD ACCEPT [0:0]
  6. :OUTPUT ACCEPT [0:0]
  7. -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  8. -A INPUT -p icmp -j ACCEPT
  9. -A INPUT -i lo -j ACCEPT
  10. -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
  11. -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
  12. -A INPUT -j REJECT --reject-with icmp-host-prohibited
  13. -A FORWARD -j REJECT --reject-with icmp-host-prohibited
  14. COMMIT

复制代码
正则表达式为-A\s\w*\s-\w\s\bREJECT\b
就是想找到REJECT字段之前,加入允许的服务
我在Regex Tester上测试正则表达式是可以筛选出需要的字段的,是不是Regex Tester的正则表达式跟Linux的有区别么?

论坛徽章:
0
2 [报告]
发表于 2012-02-13 12:28 |只看该作者
[root@RHEL6A tmp]# vim iptables
[root@RHEL6A tmp]# sed -n '/-A\s\w*\s-\w\s\bREJECT\b/p' iptables
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
[root@RHEL6A tmp]#

跟firefox的正则测试机插件找到的一样的行啊

论坛徽章:
0
3 [报告]
发表于 2012-02-13 12:39 |只看该作者
有没有python能用的正则表达式tester?我刚才试了一下,用sed的话,使用'/-A\s\w*\s-\w\s\bREJECT\b/p' 是可以筛选出来的,可是在python下使用这个也不成,'//p'是sed专用的格式么?

论坛徽章:
0
4 [报告]
发表于 2012-02-13 12:48 |只看该作者
问题解决了,看来还是正则表达式的问题,我把正则表达式修改成下面这样,在python运行就没问题了
-A.*REJECT.*
太坑爹了,难道精确匹配INPUT -j 这些内容会报错么?

论坛徽章:
0
5 [报告]
发表于 2012-02-13 13:50 |只看该作者
我也很纳闷,折腾了不少时间。原因在这里:
re_string=r'-A\s\w*\s-\w\s\bREJECT\b'
这样就可以了
我也是反复用vim修改发现的,\b有时用一种不同的颜色显示,才发现可能是这句的问题。

论坛徽章:
0
6 [报告]
发表于 2012-02-13 14:03 |只看该作者
siage 发表于 2012-02-13 12:39
有没有python能用的正则表达式tester?我刚才试了一下,用sed的话,使用'/-A\s\w*\s-\w\s\bREJECT\b/p' 是可 ...


p表示如果匹配到结果就打印出来,算是sed的一个命令选项吧

论坛徽章:
0
7 [报告]
发表于 2012-02-13 15:08 |只看该作者
多谢,这你都发现了,我用的是python2.6,re_string=r''是ASC编码么?难道在2.6字符串用的是unicode编码?

论坛徽章:
0
8 [报告]
发表于 2012-02-13 15:31 |只看该作者
r是让字符串内容去掉转义,这个问题我也解释不了太清楚,才学了几个月。只是知道一些编码相关的东西,知道怎么用而已,还没有系统深入的理解。
你可以看看相关的资料
http://hi.baidu.com/black8/blog/ ... ebb5f5f11f3663.html

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
9 [报告]
发表于 2012-02-13 19:29 |只看该作者
Python正则,务必用pattern = r'...',避免Python解释器对字符串内转义的处理,以留给正则引擎处理

论坛徽章:
0
10 [报告]
发表于 2012-02-14 08:14 |只看该作者
回复 8# askandstudy
我也是刚开始学习python,有好多不懂的地方

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP