Распознавание образов re.search () - PullRequest
0 голосов
/ 27 ноября 2018

Я хочу обнаружить некоторую специальную подстроку, а также перекрытие. У меня есть строка из ввода, и если строка содержит «AB» и «BA» (оба), я печатаю «да» и, если содержит только «ABA 'или' BAB '(перекрытие), выход «NO».Я написал следующий код, но я получаю ошибку.проблема в re.search (), если.Как я могу правильно использовать re.search для этого кода?Заранее спасибо за помощь

import re
str1=input()
if re.search('AB',str1):
        if re.search('BA',str1):
            if re.search('ABA'|'BAB',str1):
                if re.search('ABBA'|'BAAB',str1):
                    print('YES')
                print('NO')
            print('YES')
        else :
           print('NO')
else:
      print('NO')

1 Ответ

0 голосов
/ 27 ноября 2018

Вы можете напрямую проверить шаблон, не беспокоясь о перекрытии (так как для этого и нужно регулярное выражение).

(здесь я сделал предположение, что строка 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'

...