如何编写正则表达式精确匹配列表中含$、-的任意指定字符串值
含特殊字符字符串列表完全匹配正则编写方案
核心实现逻辑分两步,不需要记复杂正则语法,按流程操作就能100%达到匹配要求:
1. 预处理所有列表项,转义正则特殊字符
正则中$、-、.、*、+、?、^、[、]、(、)、{、}、\、|这类字符有特殊语法含义,直接写到正则里会被解析成语法标记而非普通字符,必须在每个特殊字符前加反斜杠\做转义。
以你给出的产品名为例,转义后结果如下:
- 原项
Accident Only Hospital 750 - Basic转义为Accident Only Hospital 750 \- Basic - 原项
Basic Accident Only Hospital $500 Excess转义为Basic Accident Only Hospital \$500 Excess - 原项
BASIC HOSPITAL COVER无特殊字符,无需转义
*如果你是在代码里实现,不要手动逐个转义,直接调用对应语言内置的正则转义方法批量处理列表即可,避免漏转字符:
- Python:调用
re.escape(字符串) - JavaScript:调用
RegExp.escape(字符串)(低版本可自行实现元字符替换逻辑) - Java:调用
Pattern.quote(字符串)
2. 拼接成最终正则规则
所有列表项转义完成后,按以下规则拼接:
- 最开头写
^,标记匹配字符串的起始位置 - 后面跟
(?:,开启非捕获分组(性能比普通捕获分组好,不需要额外存匹配结果) - 把所有转义后的列表项用
|(正则的“或”逻辑符)连接,放在分组内 - 分组闭合写
) - 最末尾写
$,标记匹配字符串的结束位置
以你给出的3个产品名为例,最终拼接完成的可直接使用的正则如下:
^(?:Accident Only Hospital 750 \- Basic|Basic Accident Only Hospital \$500 Excess|BASIC HOSPITAL COVER)$
避坑提醒
- 绝对不要省略开头的
^和结尾的$,否则会出现部分匹配误判:比如变量值为testBasic Accident Only Hospital $500 Excesstest这种包含列表项但不完全相等的内容,也会被判定为匹配成功。 - 如果需要不区分大小写匹配,直接开启正则的大小写不敏感模式标记即可,不需要修改列表项内容。
内容的提问来源于stack exchange,提问作者Satpal Singh
相关产品推荐
相关产品推荐

