好日子全部,Python和正則表達式
我之前發佈了類似的東西,所以如果您再次遇到這個問題,我很抱歉。這一次我會更具體,給你直接的例子,並描繪出我想要的。基本上,我需要讓原始數據看起來更漂亮:
str = '2011-06-1618:53:41222.222.2.22-somedomain.hi.comfw12192.10.215.11GET/965874/index.xls22233665588-0Mozilla/4.0 (compatible; MSI 5.5; Windows NT 5.1)'--55656-0.55-5874/659874540--'
more strings:
'2011-06-2150:36:1292.249.2.105-somedomain.hi.comfw12192.10.215.11GET/965874/ten.xls22233665588-0Mozilla/4.0 (compatible; MSI 6.0; Windows NT 5.1)'--55656-0.55-5874/659874540--'
'2011-01-1650:23:45123.215.2.215-somedomain.hi.comfw12192.10.215.11GET/123458/five.xls22233665588-0Mozilla/4.0 (compatible; MSI 7.0; Windows NT 5.1)'--55656-0.55-5874/659874540--'
'2011-02-1618:16:54129.25.2.119-thisdomain.hi.comfw12192.10.215.11GET/984745/two.xls22233665588-0Mozilla/4.0 (compatible; MSI 7.0; Windows NT 5.1)'--55656-0.55-5874/659874540--'
'2011-08-0525:22:16164.32.2.111-yourdomain.hi.comfw12192.10.215.11GET/85472/one.xls22233665588-0Mozilla/4.0 (compatible; MSI 8.0; Windows NT 5.1)'--55656-0.55-5874/659874540--'
在調試器:
import re
str = '2011-06-1618:53:41222.222.2.22-somedomain.hi.comfw12192.10.215.11GET/965874/index.xls22233665588-0Mozilla/4.0 (compatible; MSI 5.5; Windows NT 5.1)'--55656-0.55-5874/659874540--'
domain = re.compile('^.*?(?=([fw].+?))')
domain.search(str).group()
'2011-06-1618:53:41222.222.2.22-somedomain.hi.com'
domain = domain.search(str).group()
所以對於獲取域,我需要的破折號前擺脫一切( - ),右在域名之前。我可以用這個RE([0-9] {3,5})。([0-9] {1,3}。){2} [0-9] {1,3} [ - ]但我不知道該怎麼說,找到那個價值並且在它之後回覆一切,但是在fw12之前。
在一天結束的時候,我想這些字符串看起來像這樣,用逗號(,)作爲分隔符:
2011-08-05,25:22:16,164.32.2.111,YOURDOMAIN .hi.com,GET/85472/one.xls,Mozilla/4.0(兼容; MSI 8.0; Windows NT 5.1)
爲了解析這個問題,無論您使用哪種技術,您都需要有一些方法來區分域名後面的部分和後面的任何部分。你能用英語表達怎麼做?下列文字是否總是「fw12」,並且域名是否沒有該字符串? –
網絡日誌不帶字段之間的分隔符?奇怪的配置:s – MatToufoutu
是在特定範圍內的所有IP地址?如果不是這樣,則可能很難構建能夠意識到「fwXX」部分的結尾以及IP地址的開頭的正則表達式。 – MatToufoutu