我需要使用通用占位符查找和替换文本中的版本号,例如'*'。
问题是编写将捕获版本号的正则表达式。
一些例子:
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个字母数字字符和字母数字字符之间的特殊字符。
有什么想法吗?
答案 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]+[._:-])+