正则表达式如何实现匹配时忽略引号内的字符内容
正则匹配忽略特定字符区间文本的实现方法
正则支持匹配时跳过指定区间的内容,针对需要忽略单引号包裹内容、不将引号内字段纳入匹配范围的场景,可按如下方式调整规则:
原有正则的问题
当前使用的正则:
raw_pmc_df\[\'(.*?)]
该规则会将raw_pmc_df['开头到后续第一个]之间的所有内容(包括单引号内部的字段名)作为整体匹配,因此会出现引号内文本被纳入匹配范围的问题,和当前输出表现一致。
可用修正方案
根据使用的正则引擎支持特性,二选一即可:
- 支持
(*SKIP)(*FAIL)控制动词的引擎(PCRE、Python第三方regex库、PHP等环境)
使用如下正则:
规则逻辑:'[^']*'(*SKIP)(*FAIL)|raw_pmc_df\['|']- 优先匹配单引号包裹的完整文本段,命中后直接跳过该段、不纳入匹配结果
- 非引号区间内,分别匹配
raw_pmc_df['前缀、']后缀两个目标片段,引号内的字段名不会被命中
- 不支持
(*SKIP)(*FAIL)控制动词的引擎(Python标准库re、JavaScript等环境)
直接使用如下正则即可,不需要额外的跳过逻辑:
规则逻辑:直接把需要匹配的两个固定片段作为独立匹配规则,引号内的字段名本身不符合匹配规则,自然不会被纳入匹配结果。raw_pmc_df\['|']
效果验证
使用提供的测试文本验证:
测试原文:
to_max(((100 * raw_pmc_df['CPF_CPF_STAT_STALL']) / raw_pmc_df['CPF_CPF_STAT_BUSY']).where((raw_pmc_df['CPF_CPF_STAT_BUSY'] != 0), None))
- 原正则匹配结果:3个完整的
raw_pmc_df['字段名']片段,对应当前的输出 - 修正后正则匹配结果:6个独立片段,分别为3个
raw_pmc_df['和3个'],完全匹配期望的输出效果,引号内的字段名不会被匹配。
内容的提问来源于stack exchange,提问作者cramos24
相关产品推荐
相关产品推荐

