Python 如何使用正则表达式搜索来搜索变量值
我有多行,其中我只需要选择那些包含特定值的行。 比如说,Python 如何使用正则表达式搜索来搜索变量值,python,regex,Python,Regex,我有多行,其中我只需要选择那些包含特定值的行。 比如说, [DEBUG] 2014-12-01 16:39:12,049 [1984] Agent Logger Initialized [DEBUG] 2014-12-01 16:39:12,049 [2884] Agent Logger Initialized [DEBUG] 2014-12-01 16:39:12,049 [2884] Agent Actuation Logger Initialized 所以我有一个变量var=1984 i
[DEBUG] 2014-12-01 16:39:12,049 [1984] Agent Logger Initialized
[DEBUG] 2014-12-01 16:39:12,049 [2884] Agent Logger Initialized
[DEBUG] 2014-12-01 16:39:12,049 [2884] Agent Actuation Logger Initialized
所以我有一个变量var=1984
id=re.search(r'\[var\],s,re.I|re.M|re.S)
if id:
print line
上面的正则表达式预计只搜索var=1984,并且应该打印包含该值“[1984]”的行。有人可以建议如何执行此操作吗?我需要在Linux中进行搜索,我使用的是Python 2.6。此正则表达式应该可以:
var=1984
reg = '.+'+str(var)+'.+'
id=re.search(reg,s,re.I|re.M|re.S)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
var = '\[1984\]'
with open("test.log") as fp: # assuming your log file is test.log
lines = fp.readlines()
for line in lines:
line = line.strip()
if re.match(r'.*'+str(var)+'.*',line): # may be you want to add some more strict matching rules here.
print line
# vim:ai:et:sts=4:sw=4:
或者简单地说:
import re
s = ['[DEBUG] 2014-12-01 16:39:12,049 [1984] Agent Logger Initialized',
'[DEBUG] 2014-12-01 16:39:12,049 [2884] Agent Logger Initialized',
'[DEBUG] 2014-12-01 16:39:12,049 [2884] Agent Actuation Logger Initialized']
var = 1984
for line in s:
id = re.findall(r'.+%d.+' % var, line, re.I | re.M | re.S)
if id:
print line
输出:
[DEBUG] 2014-12-01 16:39:12,049 [1984] Agent Logger Initialized
您也可以使用一个简单的
条件来执行此操作:
from io import StringIO
text = StringIO(u"""\
[DEBUG] 2014-12-01 16:39:12,049 [1984] Agent Logger Initialized
[DEBUG] 2014-12-01 16:39:12,049 [2884] Agent Logger Initialized
[DEBUG] 2014-12-01 16:39:12,049 [2884] Agent Actuation Logger Initialized
""")
for line in text:
if '[1984]' in line:
print line
[DEBUG] 2014-12-01 16:39:12,049 [1984] Agent Logger Initialized
这应该起作用:
var=1984
reg = '.+'+str(var)+'.+'
id=re.search(reg,s,re.I|re.M|re.S)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
var = '\[1984\]'
with open("test.log") as fp: # assuming your log file is test.log
lines = fp.readlines()
for line in lines:
line = line.strip()
if re.match(r'.*'+str(var)+'.*',line): # may be you want to add some more strict matching rules here.
print line
# vim:ai:et:sts=4:sw=4:
我试过这个,效果很好,但如果我想做这样的事情,它就不起作用了。导入re-id=1984 var='[id]'并将open(“test.log”)作为fp:#假设您的日志文件为test.log lines=fp.readlines(),对于行中的行:line=line.strip(),如果re.match(r'.*.+str(var)+'.*,行):#可能需要在此处添加一些更严格的匹配规则。打印行您应该始终注意,字符串组合像“id=1984
thenvar='[id]'
”将不起作用,因为您刚刚定义了一个字符串“[id]”“
,而不是您想要的字符串“[1984]”
,这是您一开始就错了的地方。使用+
组合字符串。感谢您的帮助,它帮助我理解