我需要匹配這兩種格式,如:user:[email protected]:3847
和111.23.123.78:2938
,你怎麼做(匹配有效代理只有)?如何完美匹配代理與正則表達式?
順便說一下,python中是否有這樣的模塊(驗證代理格式)?
我需要匹配這兩種格式,如:user:[email protected]:3847
和111.23.123.78:2938
,你怎麼做(匹配有效代理只有)?如何完美匹配代理與正則表達式?
順便說一下,python中是否有這樣的模塊(驗證代理格式)?
我不確定在Python中是否存在用於驗證的包。
但是,你可以使用這個表達式,正確的格式相匹配,但不會驗證如果IP是一個有效的IP4地址:
^(?:(\w+)(?::(\w+))[email protected])?((?:\d{1,3})(?:\.\d{1,3}){3})(?::(\d{1,5}))?$
它也將捕獲用戶名,密碼,IP和端口分別
陽性:如果IP4解決了
user:[email protected]:3847
[email protected]:3847
10.10.0.1:1024
111.23.123.78:2938
10.124.0.1
0.0.0.0
正則表達式將無法識別重新有效:
10.20.456.123
底片:
10.100.1
:[email protected]
user:@10.100.1.0:100
正則表達式進行測試http://www.rubular.com/r/jErO9xqDS2
隨着驗證:
import re
samples = [
'user:[email protected]:1234',
'123.123.123.123:1234',
'123.123.123:123',
'321.123.123.123',
'123.123.123.123:123123']
def isValidUser(name):
return re.match('\w+', name) != None
def isValidPass(passwd):
return isValidUser(passwd)
def isValidIp(ip):
if ip.count('.') != 3:
return False
else:
valid = True
for i in ip.split('.'):
try:
if 0 <= int(i) <= 255:
pass
else:
valid = False
except ValueError:
return False
return valid
def isValidPort(port):
valid = False
try:
if 0 < int(port) < 2**16:
valid = True
except ValueError:
return False
return valid
def isValidProxy(proxy):
m = re.match('^((([^:]+):([^@]+))@)?((\d{1,3}\.){3}\d{1,3})(:(\d{1,5}))?$', proxy)
if m is None:
return False
user = m.group(3) or 'user'
passwd = m.group(4) or 'pass'
ip = m.group(5)
port = m.group(8) or '1234'
return isValidUser(user) and isValidPass(passwd) and isValidIp(ip) and isValidPort(port)
for n in samples:
print isValidProxy(n)
我假定口是可選的。如果您需要更改端口:
port = m.group(8) or '1234'
到
port = m.group(8)
和/或改變:
m = re.match('^((([^:]+):([^@]+))@)?((\d{1,3}\.){3}\d{1,3})(:(\d{1,5}))?$', proxy)
到
m = re.match('^((([^:]+):([^@]+))@)?((\d{1,3}\.){3}\d{1,3})(:(\d{1,5}))$', proxy)
編輯: 使用google-url (GURL) C++庫來解析和驗證網址。 There是Python包裝。
你能否提一下你喜歡urlparse的理由? –
@pxl:太糟糕了,它只解析但不驗證... – Shane
它們都是URL,沒有方案部分。我會查看['urlparse'模塊](http://docs.python.org/2/library/urlparse.html)進行驗證。 –
至於將這些格式與正則表達式匹配,您應該能夠簡化現有的URL匹配表達式;沒有路徑部分需要,也沒有計劃。 –