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

如何使用正则表达式匹配任何字符串的最后两个字符是前两个字符的相反顺序

如何使用正则表达式匹配任何字符串的最后两个字符是前两个字符的相反顺序

忽然笑 2021-11-30 10:38:23
例如,正则表达式应该匹配“aa”、“aba”、“abba”和“asddsa”,而不是“abab”。
查看完整描述

2 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

这应该有效:

^(?=(.)(.)).*\2\1$

请注意,我对前两个字符使用了前瞻,而不是简单地匹配它们。这是因为您还想匹配短于 4 个字符的字符串。所以我们不想这么早匹配前两个字符。

我将前两个字符捕获到第 1 组和第 2 组中,然后匹配 ( .*)之间的所有字符,然后匹配第 2 组中匹配的所有字符,然后匹配第 1 组 ( ) 中匹配的所有字符\1\2

爪哇:

input.matches("^(?=(.)(.)).*\\2\\1$")

Python:

re.match(r"^(?=(.)(.)).*\2\1$", input)


查看完整回答
反对 回复 2021-11-30
?
慕桂英3389331

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

我们可以在这里使用正则表达式,但老实说,手动对两组字母进行两次比较可能更容易:


String input = "BonzaioB";

int n = input.length();

if (input.charAt(0) == input.charAt(n-1) &&

    input.charAt(1) == input.charAt(n-2)) {

    System.out.println("MATCH");

}

else {

    System.out.println("NO MATCH");

}

或者在 Python 中:


input = "BonzaioB"

n = len(input)

if (input[0] == input[n-1] and input[1] == input[n-2]) :

    print("MATCH")

else:

    print("NO MATCH")

顺便说一句,这可能会优于基于正则表达式的解决方案,因为它不需要扫描整个字符串,也不需要额外的存储空间。


查看完整回答
反对 回复 2021-11-30
  • 2 回答
  • 0 关注
  • 313 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信