Python文本匹配,匹配内容跨多行

  • Post author:
  • Post category:python


刚开始用Python,不知道如何学习,在主管鑫哥的指导下,我从昨天下午直到今天早上开始研究了下Python的正则表达式,目的是在一段文本中找出匹配内容。

文本截取一段如下。

p18p1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

inet 172.17.56.104  netmask 255.255.254.0  broadcast 172.17.57.255

inet6 fe80::1e6f:65ff:feda:19c8  prefixlen 64  scopeid 0x20<link>

ether 1c:6f:65:da:19:c8  txqueuelen 1000  (Ethernet)

RX packets 141525  bytes 68071814 (64.9 MiB)

RX errors 0  dropped 1  overruns 0  frame 0

TX packets 78944  bytes 8024469 (7.6 MiB)

TX errors 0  dropped 0 overruns 0  carrier 3  collisions 0

ppp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULT

ICAST>

dfs

ds inet 11.1.1.13  netmask 255.255.255.255  destination 11.1.1.1

ppp  txqueuelen 3  (Point-to-Point Protocol)

RX packets 3850  bytes 718976 (702.1 KiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 4442  bytes 351187 (342.9 KiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

需要匹配的内容是ppp0…inet 11.1.1.13。

下面是研究的过程。

开始使用match()来匹配,但是总是出现问题,后来发现match()应该是只匹配一行的语句,在网上查了半天,发现如果用match()还要加循环逐行搜索,而且我要匹配的内容要跨多行,最后没有用match()验证。在Python的官网查了查,发现了一个search()函数,可以多行匹配。

最后程序如下

import re

str=”’   上面的 文本    ”’

c=’ppp0.+(\s|\S){0,}.*inet +((\d{1,3}.){3}\d{1,3})’

match1=re.search(c,str)

print match1

result=match1.group()

print result

结果如下

[root@localhost bypdhu]# python b.py

<_sre.SRE_Match object at 0xb7739f20>

ppp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULT

ICAST>

dfs

ds inet 11.1.1.13

可以看出来,内容被匹配出来了。

下面是对程序的具体的分析,刚写Python,很多不太懂,都要写出来便于以后翻阅。

首先要导入re模块,利用re模块的search函数。然后将文本赋给str,如果是一个*.txt等文件也是一样赋给str,然后写出要匹配内容的正则表达式,这个是最重要的。然后就可以使用search()来匹配了。

正则表达式介绍。这个正则表达式  c=’ppp0.+(\s|\S){0,}.*inet +((\d{1,3}.){3}\d{1,3})’  写了好久,最终试验成功。

首先要找以ppp0开头的,.表示任意非\n的字符,+表示匹配前一个字符一次到无限次,这样.+就可以表示最多一行的内容;然后在Python中,\s可以表示空白字符,空格\t\n\r\v\f,\S可以表示非空白字符,|是或语句,这样(\s|\S)就能表示一段空白字符或非空白字符的原子,后面跟着{0,},表示这样的原子有0到无限个,这样就可以表示中间的多行;.*inet 表示inet前的任意字符有0到无限个,后面还跟着一个空格;最后((\d{1,3}.){3}\d{1,3}),\d{1,3}表示一到三位数字,(\d{1,3}.){3}表示一到三位数字再加一个.重复三次,后面再跟一个一到三位的数字。

完成一个小任务真的很开心啊,尽管东西少,也很简单,但对于我这个初学者来说真的非常高兴。

还有不知道真正用的时候search和match的区别,这个以后再说吧。

参考网址:

https://docs.python.org/2/library/re.html#module-re

http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html



版权声明:本文为bypdhu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。