我想匹配(时间戳+日志级别信息)
示例:
2018-02-21 17:06:00,011 DEBUG [example]loremipsum
2018-02-21 17:06:00,011 DEBUG [example] loremipsum
2018-02-21 17:06:00,011 DEBUG [example] loremipsum
使用:
\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}[,.]\d{3}\s?[a-zA-Z]{4,10}
问题是我不知道是否正确,因为如果在loglevel info(DEBUG)之后有两个以上的空格或标签,我有时会有0个匹配。
由于
答案 0 :(得分:1)
让我们稍微阅读一下(使用你提供的正则表达式)
date_regex = /\d{4}-\d{2}-\d{2}/
time_regex = /\d{2}:\d{2}:\d{2}[,.]\d{3}/
log_level_regex = /[a-zA-Z]{4,10}/
regex = /#{date_regex}\s#{time_regex}\s?#{log_level_regex}/
正则表达式中的错误是量词的错误使用。您正在使用\s
(正好为1个空格)和\s?
(1或0个空格)。
您想要使用\s+
(1个或更多个空格)或\s*
(0个或更多个空格)。
这将导致:
/#{date_regex}\s+#{time_regex}\s*#{log_level_regex}/
# or if you prefer the not so readable version:
/\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2}[,.]\d{3}\s*[a-zA-Z]{4,10}/
答案 1 :(得分:0)
log.split($/).map { |line| line[/\A.*?(?=\[)/].strip }
#⇒ ["2018-02-21 17:06:00,011 DEBUG",
# "2018-02-21 17:06:00,011 DEBUG",
# "2018-02-21 17:06:00,011 DEBUG"]