如何使用Regex匹配字符串任意位置的非字母字符并实现字母序列模糊匹配
实现方案
核心逻辑
你需要的匹配规则本质是按顺序匹配搜索字符串中的所有字母,字母之间允许插入任意数量的任意字符,仅需两步即可生成符合要求的正则:
- 预处理搜索字符串:过滤掉所有非字母字符,保留原始大小写和字母顺序。比如示例中的搜索串
My Moms house过滤后得到纯字母序列MyMomshouse - 生成正则:在纯字母序列的每两个相邻字母之间插入
.*?(惰性匹配任意字符),得到最终可用的匹配正则。
最终正则示例
对应你给出的搜索串,最终生成的正则为:M.*?y.*?M.*?o.*?m.*?s.*?h.*?o.*?u.*?s.*?e
匹配验证
该正则可以命中你给出的所有样例目标片段:
- 样例1:
My Mom's house命中 - 样例2:
My8Mo2ms231#43house命中 - 样例3:
My Mom's' house命中
可选优化
- 如果要求字母之间只能插入非字母字符(不允许插入无关字母),可以把
.*?替换为[^a-zA-Z]*,对应生成的正则为M[^a-zA-Z]*y[^a-zA-Z]*M[^a-zA-Z]*o[^a-zA-Z]*m[^a-zA-Z]*s[^a-zA-Z]*h[^a-zA-Z]*o[^a-zA-Z]*u[^a-zA-Z]*s[^a-zA-Z]*e - 如果不需要区分大小写,可以给正则添加
i修饰符
内容的提问来源于stack exchange,提问作者SirNoob
相关产品推荐
相关产品推荐

