2011-08-10 12 views
1

テキスト内のバージョン番号を見つけて、一般的なプレースホルダに置き換える必要があります。 '*'。バージョン番号を識別する正規表現 - Python

問題は、バージョン番号をキャプチャする正規表現を書くことです。


いくつかの例は:

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

チェック 'packaging.version'新しいpython3.3モジュール:http://hg.python.org/cpython/file/1b4fae183da3/Lib/packaging/version.py – mouad

答えて

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

+0

あなたの返信と努力のためにたくさんありがとう:) 非常に便利! – RadiantHex