一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

利用python正则表达式匹配版本信息代码示例

时间:2020-12-09 编辑:袖梨 来源:一聚教程网

本篇文章小编给大家分享一下利用python正则表达式匹配版本信息代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。

问题描述:

用正则表达式提取文本中的版本号信息,比如说:10.1.1 9.5 10.10.11

并实现在文本中(.txt)读入,写出到文本(.txt)

首先构造正则表达式:

pattern=Vpat=“I.(I.)*I”

构造正则表达式:r'd+.(?:d+.)*d+'

import re
pattern = r'd+.(?:d+.)*d+'
f=open("F:\xxxxxx\banners.txt","r")
data=f.read()
f.close
result=re.findall(pattern,data)
f1=open("F:\xxxxxx\test1.txt","w")
for i in result:
 f1.write(i+'n')
f.close

(1)re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

(2)findall是把所有匹配到的结果都拿出来

(3)后面的group()括号里还能加数字,可以用来导出特定行

(4)d是整数的意思 +是1-无穷(就是1个以上)

(5) *是0到无穷####(I.)*是0个以上的整数加点

(6)‘(?: )' 无捕获组

当你要将一部分规则作为一个整体对它进行某些操作,比如指定其重复次数时,你需要将这部分规则用'(?:'和 ‘)'把它包围起来,而不能仅仅只用一对括号,那样将得到绝对出人意料的结果。

例:匹配字符串中重复的'ab'

>>> s='ababab abbabb aabaab'

>>> re.findall( r'b(?:ab)+b' , s )

结果:[‘ababab']

如果仅使用一对括号,看看会是什么结果:

>>> re.findall( r'b(ab)+b' , s )

结果:[‘ab']

这是因为如果只使用一对括号,那么这就成为了一个组(group)。组的使用比较复杂。

调试过程:

import re
#pattern = r'.*?(d.*d).*'
#pattern = r'd.d.d'
#pattern = r'd.(?:d.)*d'
#pattern = r'd*.(?:d.)*d*'
#pattern = r'd.(d.)*d'
pattern = r'd+.(?:d+.)*d+'
f=open("F:\shovat\banners.txt","r")
data=f.read()
##data=f.readline()
f.close
#for line in data:
result=re.findall(pattern,data)
##print(result)
 # print(result)
 # print(result.group())
#t=(result.group())
 #t=(result.group(1))

f1=open("F:\shovat\test1.txt","w")
for i in result:
 f1.write(i+'n')
f.close

banners.txt

ddd 1.1.1cisco ios software,c3750 software (c3750-ipbase-m),version
ddd 2.2.2 12.2(53)se,release softeware(fc2) 10.1.1 
ddd 3.3.3 technical support:http://www.cisco.com/techsupport
ddd 4.4.4 copyright (c) 1986-2009 by cisco systems,inc.
ddd 5.5.5 comiled sun 13-dec-09 16:25 by prod_rel_team
9.5

识别结果:

test1.txt

1.1.1

2.2.2

12.2

10.1.1

3.3.3

4.4.4

5.5.5

9.5

热门栏目