Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于标识版本号的正则表达式-Python_Python_Regex - Fatal编程技术网

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

用于标识版本号的正则表达式-Python,python,regex,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)

我需要查找文本中的版本号并将其替换为通用占位符,例如“*”

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


一些例子:

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个字母数字字符和字母数字字符之间的特殊字符



有什么想法吗?

在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]+[.:-])+

在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]+[.\u:-])+
检查
打包。版本
新python3.3模块:检查
打包。版本
新python3.3模块:非常感谢您的回复和努力:)非常有用!非常感谢您的回复和努力:)非常有用!