【发布时间】:2013-06-24 03:43:54
【问题描述】:
大家好,
我之前发布了类似的内容,因此如果您再次遇到此问题,我深表歉意。这一次,我会更具体,给你直接的例子,并准确地描述我想要的。基本上,我需要让原始数据看起来更漂亮:
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
-
是否所有的IP地址都在一个特定的范围内?如果不是,则可能很难构建一个能够识别“fwXX”部分结尾和 IP 地址开头的正则表达式。
-
看起来很像您的小时值超过 24。这有点不寻常。还有54秒。什么?!