Python中使用正则匹配月份缩写格式日期提升搜索速度咨询
优化方案
用正则表达式可以大幅提升搜索速度,你原有方案的性能瓶颈在于需要枚举366种可能的日期字符串,逐一对每行文本做子串查找,相当于每行要重复扫描数百次,而正则表达式只需对每行做一次扫描就能匹配所有符合规则的内容,时间复杂度要低得多。
实现代码
首先预编译正则表达式(预编译后多次调用可以避免重复编译的开销):
import re # 正则匹配规则:词边界 + 12个合法月份缩写 + 空格 + 两位日期(01-31) + 词边界 DATE_REGEX = re.compile(r'\b(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (0[1-9]|[12]\d|3[01])\b') def find_all_date_positions(text: str): """返回所有匹配日期的起始位置、结束位置、匹配内容""" for match in DATE_REGEX.finditer(text): yield match.start(), match.end(), match.group()
使用说明
- 该正则会自动匹配所有符合
月份缩写+空格+两位日格式的内容,自动过滤不符合格式的字符串,无需提前枚举所有可能的日期 - 如果需要严格校验日期合法性(比如排除2月30日、4月31日这类不存在的日期),可以对匹配到的结果做二次校验,比在正则里写复杂的日期校验逻辑效率更高
- 针对数千行文本的场景,该方案的执行速度会比你原有实现快100倍以上
内容的提问来源于stack exchange,提问作者Gianni Spear
相关产品推荐
相关产品推荐

