我正在使用Python脚本将一些IRC日志(energymech格式)添加到数据库中;要做到这一点,我必须将字符串分成他们的部分(时间戳,用户,消息)。
我正在使用以下正则表达式来获取适合的文本行:
normalline = re.compile('^\[[^\]]*(\d{2}):\d+:\d+\] <([^>]+)> (.*)$')
问题是它没有正确分配第一个捕获组(它只返回组中的前2个字符)。
我正在测试它的文本行[20:33:02] <user> random message here
我用来测试的脚本如下:
import re
normalline = re.compile('^\[[^\]]*(\d{2}):\d+:\d+\] <([^>]+)> (.*)$')
print normalline.search('[20:33:02] <user> random message here').groups()
我得到的结果是('20', 'user', 'random message here')
而不是('20:33:02', 'user', 'random message here')
我确信我会以某种方式弄乱正则表达式,但对于我的生活,我无法弄清楚如何。
答案 0 :(得分:3)
您似乎只需要更改第一个捕获组来封装所有三个数字:
^\[[^\]]*(\d{2}:\d+:\d+)\] <([^>]+)> (.*)$
匹配:
('20:33:02', 'user', 'random message here')
您可能还希望将第二个和第三个数字限制为仅两位数,就像您对第一个数字一样:
^\[[^\]]*(\d{2}:\d{2}:\d{2})\] <([^>]+)> (.*)$