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

时间:2019-03-08 06:29:21

标签: java python

例如,正则表达式应匹配“ aa”,“ aba”,“ abba”和“ asddsa”,但不能匹配“ abab”。

2 个答案:

答案 0 :(得分:3)

这应该有效:

REM assign binary values based on a random value using a binary
REM convert function reading values from data.
RANDOMIZE TIMER ' reseed rnd
A = INT(RND * 10 + 1)
RESTORE
FOR X = 1 TO A
    READ X$
NEXT
pinsb = GetBinary(X$)
PRINT "pinsb="; pinsb
END
DATA "1110111","10100","10110011","10110110","11010100"
DATA "11100110","11100111","110100","11110111","11110100"
FUNCTION GetBinary (B$)
    FOR V = LEN(B$) TO 1 STEP -1
        IF MID$(B$, V, 1) = "1" THEN
            X# = X# + 2 ^ (V - 1)
        END IF
    NEXT
    GetBinary = X#
END FUNCTION

请注意,我对前两个字符使用了前瞻性,而不是简单地将它们匹配。这是因为您还希望匹配少于4个字符的字符串。因此,我们不希望这么早就匹配前两个字符。

我将前两个字符捕获到组1和2中,然后匹配之间的所有内容(^(?=(.)(.)).*\2\1$ ),然后匹配组2中匹配的所有内容,然后匹配组1中的所有匹配的内容({{1 }}。

Java:

.*

Python:

\1\2

答案 1 :(得分:0)

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

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

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