Вы можете напрямую проверить шаблон, не беспокоясь о перекрытии (так как для этого и нужно регулярное выражение).
(здесь я сделал предположение, что строка ABAxyzBAB
должна печатать 'YES'
, поскольку она содержит случаи AB
и BA
в отдельных случаях, а не только перекрытие)
import re
str1=input()
if re.search(r'AB.*?BA', str1):
print('YES')
elif re.search(r'BA.*?AB', str1):
print('YES')
else:
print('NO')
Что он делает, так это сначала проверяет, соответствует ли часть строки AB
, затем просматривает AB
, чтобы найти BA
, если это происходит, он печатает 'YES'
.В противном случае он пытается сделать обратное, затем он проверит, соответствует ли часть строки BA
, затем он будет искать после BA
, чтобы найти AB
.Если он находит AB
, то потом печатает 'YES'
.В случае, если ничего из этого не произойдет, он печатает 'NO'