輸入文件,命名爲共識,是下面的形式:使用re.compile和團體的正則表達式在Python
r Tor4ever AAcif1htILdru0BO0qX7OwGVhAU oHlbWBdaN3+QSleqBVL9/yAdcRs 2014-07-31 21:42:43
s Exit Fast Guard HSDir Running V2Dir Valid
v Tor 0.2.4.21
w Bandwidth=231
p reject 25,119,135-139,445,563,1214,4661-4666,6346-6429,6699,6881-6999
r Tornin AA8YrCza5McQugiY3J4h5y4BF9g vNRd1kyQ0i9UsVwYq5YFPHJi3jw 2014-08-01 00:26:18
s Fast Guard HSDir Named Running Stable V2Dir Valid
v Tor 0.2.4.23
w Bandwidth=713
p reject 1-65535
我想解析出域名(第r行的開始) ,保護標記(在S線)和帶寬(在W線)得到類似如下:
{ {"nickname" : "Tor4ever", "type" : "Guard", "bandwidth" : "231"},
{"nickname" : "Tornin", "type" : "Guard", "bandwidth" : "713"} }
我無法制定正確的正則表達式。下面是我使用的代碼的相關部分:
consensus = file(sys.argv[1]).read()
regex = re.compile('''^r\s(.*?)\s.*?\ns\s.*?(Guard)\s.*?\nw\s.*?([0-9]+)\n''',
re.MULTILINE)
for record in regex.finditer(consensus):
relay = {
'nickname' : record.group(1),
'type' : record.group(2),
'bandwidth' : record.group(3),
}
relays['relays'].append(relay)
open('tor_relays.txt','w').write(json.dumps(relays, indent=4))
誰能告訴我爲什麼我的正則表達式解析不是我預料到的方式嗎? 對不起,很長的文章,並提前致謝!
你忘了佔'v托爾...'行了'(後衛)'部分之後。 – OnlineCop 2014-08-28 18:40:38