python模式匹配和过程

时间:2014-04-25 09:04:58

标签: python regex text

我正在尝试用一堆行解析日志。 我试图从实时跟踪中解析的行(来自文件的尾部类型)是以" 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

4 个答案:

答案 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])