用于识别版本号的正则表达式 - Python

时间:2011-08-10 12:25:08

标签: python regex

我需要使用通用占位符查找和替换文本中的版本号,例如'*'。

问题是编写将捕获版本号的正则表达式。


一些例子:

Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.1 (KHTML, like Gecko) Ubuntu/11.04 Chromium/14.0.825.0 Chrome/14.0.825.0 Safari/535.1

Mozilla/5.0(iPad; U; CPU iPhone OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314 Safari/531.21.10gin_lib.cc

Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-PT; rv:1.9.2.7) Gecko/20100713 Firefox/3.6.7 (.NET CLR 3.5.30729)

版本号包含:

  • 字母数字字符
  • 特殊字符,即'。-_:'

一个简单的正则表达式可能是r'[0-9._:-]+'但这不起作用,因为版本号至少需要1个字母数字字符和字母数字字符之间的特殊字符。


有什么想法吗?

1 个答案:

答案 0 :(得分:1)

在re模块中,使用子功能。它将返回一个字符串,其中输入正则表达式的所有匹配项都由函数的输出替换,或者只是一个字符串。问题在于确定要替换的每个字符串中的版本号。我假设您想要替换所有版本号。

import re
data = ["Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.1 (KHTML, like Gecko) Ubuntu/11.04 Chromium/14.0.825.0 Chrome/14.0.825.0 Safari/535.1",
"Mozilla/5.0(iPad; U; CPU iPhone OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314 Safari/531.21.10gin_lib.cc",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-PT; rv:1.9.2.7) Gecko/20100713 Firefox/3.6.7 (.NET CLR 3.5.30729)"]
output = []
for str in data:
   output.append(re.sub(r'\d[0-9a-zA-Z._:-]+', '*', str))
print output

给出了这些结果:

['Mozilla/* (X*; Linux i*) AppleWebKit/* (KHTML, like Gecko) Ubuntu/* Chromium/* Chrome/* Safari/*', 
'Mozilla/*(iPad; U; CPU iPhone OS * like Mac OS X; en-us) AppleWebKit/* (KHTML, like Gecko) Version/* Mobile/* Safari/*',
'Mozilla/* (Windows; U; Windows NT *; pt-PT; rv:*) Gecko/* Firefox/* (.NET CLR *)']

正则表达式不是很好,我想要一套重复的字母数字,然后是分隔符。但我似乎无法让它发挥作用。像([0-9a-zA-Z]+[._:-])+

这样的东西