为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式字符串中的两个相等字符

正则表达式字符串中的两个相等字符

慕妹3242003 2021-12-22 20:26:14
我从 RegEx 开始,我需要帮助,我想验证是否有两个相等的字符后跟 A,或者它们是分开的(但保持不变)并在中间 A。我用例子解释:BBA -> trueABB -> trueBAB -> trueCCA -> trueABC -> falseBAC -> falseBBBA -> false (there have to be only two)ABBB -> false (there have to be only two)目前我有类似的东西,但它不能正常工作:(([B-Z])\1{2}A) | ([B-Z]{1}A[B-Z]{1}) | (A([B-Z])\1{2})我知道我没有接近正确答案,我正在学习。如果有人能帮我一把,我将不胜感激。
查看完整描述

3 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

这可以相当优雅地完成:

\b(?=[A-Z]{3}\b)A?([B-Z])A?\1A?\b

regex101 上的演示

[A-Z]{3}由于\b两边都有,lookahead的内部断言序列的长度正好是 3 个字母。TheA?([B-Z])A?\1A?断言除了 之外还有两个相同的 letter 实例A,它们可以A在任何时候穿插在它中间,并且由于两边\b都在旁边,断言没有其他任何东西混入。


这也可以推广到任意数量的重复:

\b(?=[A-Z]{3}\b)(?:\1|(?!\2)([B-Z])()|(?!\3)A())+\b\2

只需更改{3}为您想要的任何总字符数(即,“A”的重复数加 1)。

regex101 上的演示
在线试用!(爪哇)


查看完整回答
反对 回复 2021-12-22
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

用于\b仅匹配单词,并为每个|.

\b([B-Z])\1A|([B-Z])A\2|A([B-Z])\3\b

检查:https : //regexr.com/42bp0


查看完整回答
反对 回复 2021-12-22
?
慕娘9325324

TA贡献1783条经验 获得超4个赞

Pattern pattern = Pattern.compile("([B-Z])\\1A|A([B-Z])\\2|([B-Z])A\\3")

反向引用贯穿整个模式并与 OR 运算符交叉。虽然正如其他人提到的那样,一般来说它不太适合正则表达式解决方案。

请注意,您必须根据需要添加 ^ 和 $ 以仅匹配此模式,如下所示:

"^([B-Z])\\1A\$|^A([B-Z])\\2\$|^([B-Z])A\\3\$"


查看完整回答
反对 回复 2021-12-22
  • 3 回答
  • 0 关注
  • 612 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号