好日子全部,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