我试图编写正则表达式来解析我拥有的旧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;不见了。有人会对如何更好地接近这个有任何暗示吗?
答案 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+字符,直到行尾