使用正则表达式python从输出中提取版本号?

时间:2019-11-05 07:22:57

标签: python regex

我想要输出的版本号,对于这两个输出,我只想要一个代码

  

版本:从Cisco读取输出,直到Version,然后提取Version Number

     

例如:读取此行,例如Cisco IOS软件,s2t54软件(s2t54-ADVIPSERVICESK9-M),版本15.5(1)SY2,   输出版本

     

输出:15.5(1)SY2

     

输出1:   '''   Cisco IOS软件,s2t54软件(s2t54-ADVIPSERVICESK9-M),版本15.5(1)SY2,发布软件(fc6)   ROM:系统引导程序,版本12.2(50r)SYS3,发布软件(fc1)   CPU:MPC8572_E,版本:2.2,(0x80E80022)   核心:E500,版本:3.0,(0x80210030)   '''

     

输出2:   Cisco IOS软件,IOS-XE软件,Catalyst 4500 L3交换软件(cat4500es8-UNIVERSALK9-M),版本03.08.07.E发行软件(fc2)   根据GNU通用公共许可证(“ GPL”)2.0版获得许可。的   根据GPL 2.0版许可的软件代码是随附的免费软件   GPL版本2.0条款下的GPL代码。

我尝试了以下代码:

r = re.findall(r'Version\s*(([\w]+))', str)
r[0]

它提供输出:

  

15.5

     

03.08.07.E

预期输出:

  

15.5(1)SY2

     

03.08.07.E

2 个答案:

答案 0 :(得分:1)

我认为这是您要寻找的表达方式:

Version\s*(.+?)[\s|,]

它匹配“版本”之后的所有内容,直到找到逗号或空格

答案 1 :(得分:1)

尝试Version\s+([^,\s]+).+

说明:

Version-实际匹配Version

\s+-匹配一个或多个空格

([^,\s]+)-匹配空格\s或逗号,中的一个或多个其他字符,并将其存储在第一个捕获组中

.+-匹配任何一个或多个字符(换行符除外),这将消耗其余的输出并防止在一个输出中匹配多个版本

Demo