首页 > 解决方案 > 正则表达式匹配包含两个任意字符但不是三个的字符串

问题描述

我想要一个正则表达式来匹配包含相同字符的字符串两次(不一定是连续的),但如果该字符出现三次或更多次则不匹配。

例如,给定这两个输入:

abcbde
abcbdb

第一个abcbde会匹配,因为它包含b两次。但是,abcbdb包含b3 次,所以不会匹配。

我已经创建了这个正则表达式,但是它同时匹配:

(\w).*\1{1}

我也尝试过使用?修饰符,但是仍然匹配abcbdb,我不希望它这样做。

标签: regexregex-negationregex-lookarounds

解决方案


您需要两次检查:第一次检查以确保输入中不存在 3 次字符,第二次检查以查找存在 2 次的字符:

^(?!.*(\w).*\1.*\1).*?(\w).*\2

与使用编程语言构建字符频率数组相比,这非常低效,只需要 1 次通过整个输入。但它有效。


推荐阅读