通过re.search()进行模式识别

时间:2018-11-27 11:16:08

标签: regex python-3.x pattern-recognition

我想检测一些特殊的子字符串并且也重叠。我从输入中得到一个字符串,如果该字符串包含'AB'和'BA'(两者),则打印出'是' 如果仅包含“ 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')

1 个答案:

答案 0 :(得分:2)

您可以直接检查模式,而不必担心重叠(因为这是regex的优点)。

(我在这里假设一个字符串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'