如何使用正则表达式来匹配任何最后两个字符是反向ord中前两个字符的字符串

2024-10-03 00:25:32 发布

您现在位置:Python中文网/ 问答频道 /正文

例如,正则表达式应该匹配“aa”、“aba”、“abba”和“asddsa”,而不是“abab”。你知道吗


Tags: aaabaabbaababasddsa
2条回答

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

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")

顺便说一句,这可能比基于regex的解决方案要好,因为它不需要扫描整个字符串,也不需要额外的存储空间。你知道吗

这应该起作用:

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

注意,我对前两个字符使用了lookahead,而不是简单地匹配它们。这是因为您还希望匹配短于4个字符的字符串。所以我们不想这么早就匹配前两个字符。你知道吗

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

爪哇语:

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

Python:

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

相关问题 更多 >