如何使用regex正则表达式仅提取Admit、Adm:等关键词紧邻的日期
正则匹配关键词紧邻日期的修改方案
问题根源
原有正则中关键词与日期之间使用
.*?匹配,规则过于宽松,允许两者间隔任意非换行字符,因此会误匹配到关键词后间隔大量无关内容的日期。
调整方案
核心修改是限制关键词和日期之间仅能出现空白字符(空格、制表符等),将原来的.*?替换为\s+,同时补充正则特殊字符转义避免规则失效。
修改后完整代码
import re s = """Sentence 1: Admit on TOM, SINI [STOM] Dismissal Date: 07/20/2021 Sentence 2: Admit 08/07/2021 TOM, SINI [STOM] Sentence 3: Adm: 09/07/2018 TOM, SINI [STOM]""" admission_keys = ['Admit','Adm:'] # 正则规则添加raw标记避免转义异常 date_patterns = [r'\d{2}/\d{2}/\d{4}',r'\d{1,2}-\d{1,2}-\d{2,4}'] # 关键词和日期之间仅允许空白字符 pattern = re.findall(r"(?:" + '|'.join(admission_keys) + r"\s+(?:" + '|'.join(date_patterns) + r'))',s) print(','.join(pattern))
运行输出
Admit 08/07/2021,Adm: 09/07/2018
内容的提问来源于stack exchange,提问作者user17040675
相关产品推荐
相关产品推荐

