regex - 正则表达式匹配包含两个任意字符但不是三个的字符串
问题描述
我想要一个正则表达式来匹配包含相同字符的字符串两次(不一定是连续的),但如果该字符出现三次或更多次则不匹配。
例如,给定这两个输入:
abcbde
abcbdb
第一个abcbde
会匹配,因为它包含b
两次。但是,abcbdb
包含b
3 次,所以不会匹配。
我已经创建了这个正则表达式,但是它同时匹配:
(\w).*\1{1}
我也尝试过使用?
修饰符,但是仍然匹配abcbdb
,我不希望它这样做。
解决方案
您需要两次检查:第一次检查以确保输入中不存在 3 次字符,第二次检查以查找存在 2 次的字符:
^(?!.*(\w).*\1.*\1).*?(\w).*\2
与使用编程语言构建字符频率数组相比,这非常低效,只需要 1 次通过整个输入。但它有效。
推荐阅读
- java - xml 到 java rest api (spring boot)
- javascript - 在 IOS 的 Safari/Chrome 中无法使用 Cache-API,对吗?
- rxjs - 使用 RxJS 在 Observable 链中触发并忘记
- java - 如何在android中另一个名为“Activity B”的活动中使用“Activity A”的switch case中定义的方法?
- python - 从文本行中的列表中查找字符串
- assembly - RISC-V SiFive HiFive Unleashed FMADD(32) 下溢标志未在次正常结果上设置
- c - 如何过滤掉 ASCII 中“Z”和“a”之间的垃圾?
- javascript - 将对象推入数组中的概念问题
- c++ - 使用 QNetworkAccessManager 时智能指针和避免手动内存管理
- python - 在requirements.txt中指定依赖项时如何转义本地git repo路径中的空格