Python 2.7 python正则表达式从日志文件行提取字符串

Python 2.7 python正则表达式从日志文件行提取字符串,python-2.7,Python 2.7,我想从日志文件中提取数据 对于打开的文件 a=open('access.log','rb') lines = a.readlines() 假设第[0]行 123.456.678.89--[04/Aug/2014:12:01:41+0530]“GET/123456789_10.10.20.111 HTTP/1.1“404537”-“Wget/1.14(linux gnu)” 我只想从“GET/123456789_10.10.20.111 HTTP/1.1”中提取123456789和10.10.2

我想从日志文件中提取数据

对于打开的文件

a=open('access.log','rb')
lines = a.readlines()
假设第[0]行 123.456.678.89--[04/Aug/2014:12:01:41+0530]“GET/123456789_10.10.20.111 HTTP/1.1“404537”-“Wget/1.14(linux gnu)”

我只想从“GET/123456789_10.10.20.111 HTTP/1.1”中提取123456789和10.10.20.111

模式将类似于以/开头的字符串,重复数字然后取消排序,然后是ip

我试过了,我觉得这项工作需要开销

node = re.search(r'\"(.*)\"', line).group(1)
node = node.split(" ")[1]
node,ip = node.split("_")
node = node[1:]
print node,ip

如何使用图案实现此目的?

您想在一行中完成此操作吗

nodeip = re.search(r'([\d]{9})_([\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3})', line)
现在,您的节点和IP位于组1和组2中:

print nodeip.group(1), nodeip.group(2)
产出:

123456789 10.10.20.111

好的,但是
[0-9]
意味着您只需要一个数字字符(等于
[0-9]{1}
)。对非固定长度使用
[0-9]+
(等于
[0-9]{1,}
)。。我将从上面的日志中提取日期,从上面的日志中提取日期,所以我使用了时间。字符串=re.search(r,((...[[(..[(((...)我将从上面的日志中提取日期,我将从上面的日志中提取日期,我将从上面的日志中提取日期,所以我使用了时间,我用了时间,线)它对我工作,但我创建了单独的搜索,它对我创建了单独的搜索,如果我想把它作为第三组作为第三组在上面的查询中的第三组,如果我想得到它作为第三组的第三组在上述查询中的第三组。::::::::::::::::::::::::,<<<<<<<<<<<<<<<<<<<<<<<<<代码><<<<<<<<<<<<<<代码>>>((((((<<<[1,3}.[\d]{1,3})
(?:.+?)
意思是:
(组开始
?:不存储到组中
+任何字符
?但是在找到下一个规则之前,或者在没有规则的情况下,将存储所有字符直到组结束
)。换句话说:用惰性方法跳过任何字符,比如
]“GET/
。你可以用
(?:一月|二月|三月|四月|五月|六月|七月|八月|九月|十月|十一月|)十二月