python模式匹配与处理

2024-05-14 11:20:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用一堆行来解析日志。 我试图从livetrace(类似于文件的尾部)解析的行是以“Contact”开头的行。 实际上我需要用括号里的所有东西 [2a00:c30:7141:230:1066:4f46:7243:a6d2]和括号后用双点分隔的数字(56791) 作为变量。 我试过用regex搜索,但我不知道如何处理。你知道吗

Contact: "200" <sip:200@[2a00:c30:7141:230:1066:4f46:7243:a6d2]:56791;transport=udp;registering_acc=example_com>;expires=600

Tags: 文件contact数字regex括号transportudpsip
3条回答

如果格式始终相同:

for line in logfile:
    if "Contact" in line:

        myIPAddress=line.split('[')[1].split(']')[0]
        myPort=line.split(']:')[1].split(';')[0]

使用regex这样做

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()

如果您通过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

基本上,阅读标准输入的每一行,然后试着找出你感兴趣的项目。如果一行不匹配,则不显示任何内容。你知道吗

相关问题 更多 >

    热门问题