正则表达式匹配包含两个字符但不包含三个字符的字符串

时间:2018-12-02 11:56:30

标签: regex regex-negation regex-lookarounds

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

例如,给定这两个输入:

abcbde
abcbdb

第一个abcbde将匹配,因为它包含两次b。但是,abcbdb包含b三次,因此不匹配。

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

(\w).*\1{1}

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

1 个答案:

答案 0 :(得分:4)

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

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

与使用您的编程语言来构造字符频率数组(仅需要在整个输入中传递1个字符)相比,这是极其低效的。但这有效。