我正在尝试用一堆行解析日志。 我试图从实时跟踪中解析的行(来自文件的尾部类型)是以" Contact"开头的行。 实际上我需要使用括号内的所有内容 [2a00:c30:7141:230:1066:4f46:7243:a6d2]和括号后用双点分隔的数字(56791) 作为变量。 我尝试了机智的正则表达式搜索,但我不知道如何处理。
Contact: "200" <sip:200@[2a00:c30:7141:230:1066:4f46:7243:a6d2]:56791;transport=udp;registering_acc=example_com>;expires=600
答案 0 :(得分:0)
如果格式始终相同:
for line in logfile:
if "Contact" in line:
myIPAddress=line.split('[')[1].split(']')[0]
myPort=line.split(']:')[1].split(';')[0]
答案 1 :(得分:0)
使用正则表达式来执行此操作
import re
logfile = open('xxx.log')
p = r'\[([a-f0-9:]+)\]:([0-9]+)'
pattern = re.compile(p)
for line in logfile:
if line.startswith('Contact:'):
print pattern.search(line).groups()
logfile.close()
答案 2 :(得分:0)
如果您通过类似tail -f $logfile
的内容获得新条目,则可以将其输出通过管道输出:
import re
import sys
for line in sys.stdin:
m = re.match(r'Contact: .*?\[(.*?)\]:(\d+)', line)
if m is not None:
address, port = m.groups()
print address, port
基本上读取标准输入中的每一行,并尝试找到您感兴趣的项目。如果一行不匹配,则不显示任何内容。
答案 3 :(得分:0)
data =re.search(r'Contact: .*?\[(.*?)\]:(\d+)', line_in_file)
if match:
temp=line_in_file.split('[')
temp1=temp[1].split(';')
hexValues = re.findall('[a-f0-9]', temp1[0])