例如,正则表达式应该匹配“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)

慕桂英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")
顺便说一句,这可能会优于基于正则表达式的解决方案,因为它不需要扫描整个字符串,也不需要额外的存储空间。
添加回答
举报
0/150
提交
取消