我正在使用 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')
我确信我以某种方式弄乱了正则表达式,但我终究无法弄清楚如何做。
请您参考如下方法:
看起来你只需要改变第一个捕获组来封装所有三个数字:
^\[[^\]]*(\d{2}:\d+:\d+)\] <([^>]+)> (.*)$
这匹配:
('20:33:02', 'user', 'random message here')
您可能还想将第二个和第三个数字限制为只有两位数,就像您对第一个数字所做的那样:
^\[[^\]]*(\d{2}:\d{2}:\d{2})\] <([^>]+)> (.*)$
