Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 解析日志的正则表达式。_Regex_Regex Group - Fatal编程技术网

Regex 解析日志的正则表达式。

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:

我正试图编写一个正则表达式来解析出一个旧的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: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'}