正则表达式来解析日志。

时间:2017-09-14 14:45:17

标签: regex regex-group

我试图编写正则表达式来解析我拥有的旧IRC日志。

正则表达式:

  (\d\d:\d\d)(<)(@|\+)(.+?)>(.*)

日志示例:

= 00:00<@billy> text text text text text text text text text text text text text text text 
= 00:03<+tom> text text text text text text 
= 00:03<somedude> text text

除了在频道中没有操作员(@)或语音(+)状态的用户之外,我已经能够从日志中解析出我需要的所有内容。

因此,当我运行正则表达式时,我得到以下内容:

[('00:00', '<', '@', 'bill', " text text text text text text text text text text text text text text text ")]
[('00:00', '<', '+', 'tom', " text text text text text text ]
[]

因此,&#39; somedude&#39;不见了。有人会对如何更好地接近这个有任何暗示吗?

1 个答案:

答案 0 :(得分:1)

要点是@之后添加+,或者更好 - ? =&gt; (@|\+)。请注意,您不需要在字符类中转义[@+],因为它与类中的文字加符号匹配。

在Python 3中,我建议将正则表达式用于命名捕获组。

[@+]?

请参阅Python demo online,输出:

+

模式详情

  • import re ss = [ '= 00:00<@billy> text text text text text text text text text text text text text text text ', '= 00:03<+tom> text text text text text text ', '= 00:03<somedude> text text'] for s in ss: m = re.search(r'(?P<time>\d{2}:\d{2})<(?P<user>[@+]?[^>]*)>(?P<message>.*)', s) if m: print(m.groupdict()) - 小组&#34;时间&#34;:2位数,{'time': '00:00', 'message': ' text text text text text text text text text text text text text text text ', 'user': '@billy'} {'time': '00:03', 'message': ' text text text text text text ', 'user': '+tom'} {'time': '00:03', 'message': ' text text', 'user': 'somedude'} ,2位
  • (?P<time>\d{2}:\d{2}) - :
  • < - 小组&#34;用户&#34;:1或0 <(?P<user>[@+]?[^>]*),然后是@以外的任何0 +字符
  • + - >
  • > - 小组&#34;消息&#34;:任意0+字符,直到行尾