面试题答案
一键面试- 正则表达式:
import re
pattern = re.compile(r'\[(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})\] (DEBUG|INFO|WARN|ERROR) ([a-zA-Z0-9_]+) (.*)')
- 优化思路:
- 预编译正则表达式:使用
re.compile
将正则表达式编译成模式对象,这样在多次匹配时无需重复编译,提高匹配效率。 - 字符集与限定符优化:
\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}
精准匹配时间戳格式,\d
匹配数字,{n}
限定字符出现次数,提高匹配准确性和效率。(DEBUG|INFO|WARN|ERROR)
使用分支结构明确匹配日志级别,减少不必要的字符匹配尝试。[a-zA-Z0-9_]+
匹配模块名,[字符集]
定义可匹配字符范围,+
表示至少出现一次,精确匹配模块名格式。(.*)
匹配具体信息,.*
表示匹配除换行符外的任意字符零次或多次,满足具体信息的格式要求。
- 预编译正则表达式:使用
- 可能用到的正则特性:
- 字符类:如
\d
匹配数字,[a-zA-Z0-9_]
定义字符集合,用于精准匹配特定字符类型。 - 限定符:
{n}
、+
等,用来限定字符出现次数,控制匹配的精准度。 - 分支结构:
(DEBUG|INFO|WARN|ERROR)
通过|
实现多选项匹配,明确匹配的可能性。 - 分组:如
(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})
将时间戳部分分组,便于后续提取和处理。
- 字符类:如