在 python 中使用 re 库检测一些特殊的子字符串

Detect some special sub string with re library in python

我想检测一些特殊的子字符串并且 overlapping.I 有一个来自输入的字符串,如果该字符串包含 'AB' 和 'BA'(两者)我打印出来'yes' 如果仅包含 'ABA' 或 'BAB'(重叠),则输出为 'NO'。我写了下面的代码,但我收到错误。问题出在 if 中的 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')

您可以直接检查模式而不用担心重叠(因为这正是正则表达式的用武之地)。

(我在这里假设字符串 ABAxyzBAB 应该打印 'YES' 因为它在个别情况下包含 ABBA 的情况,而不仅仅是一个重叠)

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'