使用正则表达式在IRC日志中提取用户名?

时间:2013-05-01 19:42:00

标签: python regex chat username irc

我尽可能地学习编程,而且我一直在使用Python。我目前正在编写一个IRC统计信息生成器(就好像已经没有足够的那些),我正在尝试提供一个与特定日志格式的用户名(和只有用户名)匹配的正则表达式。但是,我的那个与re.search 不匹配。

以下是日志格式的示例:

may 01 14:04:54 <FishCream> Wahoo!
may 01 14:05:01 <LpSamuelm> Oh, if only talking was this fun in real life.
jan 01 00:00:00 <Username>  Message goes here.
jan 01 00:00:00 *   Username Action goes here.

以下是编译语句:

findusername = re.compile("^[a-zA-Z]+\s[0-9]+\s[0-9:]\s<([A-Za-z]+)>")
finduseraction = re.compile("^[a-zA-Z]+\s[0-9]+\s[0-9:]\s\*\s+([A-Za-z]+)\s")

正如你所看到的,我已经做了两个单独的语句,用于在用户说话时和使用/ me命令时查找用户名 - 为这两个命令制作一个超级正则表达式可能是可能的,但我已经头疼了它是。

任何人都可以帮我确定问题吗?

1 个答案:

答案 0 :(得分:0)

您的[0-9:]课程仅匹配一个字符,而不是那里的8个字符;添加量词:

findusername = re.compile("^[a-zA-Z]+\s[0-9]+\s[0-9:]{8}\s<([A-Za-z]+)>")
finduseraction = re.compile("^[a-zA-Z]+\s[0-9]+\s[0-9:]{8}\s\*\s+([A-Za-z]+)\s")

这假设您每次都进入单独的一行;如果您的日志文件一次包含多行,请添加re.MULTILINE标记。

在输入示例中使用带有re.MULTILINE的{​​{1}}标记的演示:

.findall()