Regex 解析日志的正则表达式。
我正试图编写一个正则表达式来解析出一个旧的IRC日志 正则表达式:Regex 解析日志的正则表达式。,regex,regex-group,Regex,Regex Group,我正试图编写一个正则表达式来解析出一个旧的IRC日志 正则表达式: (\d\d:\d\d)(<)(@|\+)(.+?)>(.*) (\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:
(\d\d:\d\d)(<)(@|\+)(.+?)>(.*)
(\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文本文本
=00:03文本
=00:03文本
除了频道中没有操作员(@)或语音(+)状态的用户之外,我已经能够从日志中解析出我需要的所有内容
因此,当我运行正则表达式时,我得到以下结果:
[('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 ]
[]
[('00:00','主要的一点是通过在(@|\+)
之后添加?
使@
或+
可选。注意,在字符类中不需要转义+
,因为它与类中的文字加号匹配
在Python3中,我建议使用带有命名捕获组的正则表达式
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())
图案细节
(?P\d{2}:\d{2})
-组“时间”:2位,:
,2位
以外的任何0+字符
-a
(?P.*)
-分组“消息”:任何0个以上字符,直到行尾
通过添加?
(\d\d:\d\d)(.*)
使该组成为可选组。请看。我想有些组在这里是多余的,请根据您的需要随意重新添加该模式。看,可能更好?([^>]
可能匹配换行符,[^>\n]*
可能更好)@WiktorStribiżew这些建议对我都不起作用。如果有帮助的话,我正在使用Python 3.0和re
。@WiktorStribiżew这是我的一个键入错误。现在效果很好。谢谢。我根据第二个建议发布了答案。
{'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'}