Поиск строки между 2 шаблонами python

#python #regex #pattern-matching

#python #регулярное выражение #сопоставление с шаблоном

Вопрос:

Итак, я изучал регулярное выражение на Python, и я довольно хорошо усвоил, что все еще есть что-то, чего я не могу понять. У меня есть список строк. В этом списке некоторые начинаются с «Что», а некоторые — с «Как», и оба они заканчиваются на ‘?’. Я хочу, чтобы вся подстрока списка строк начиналась с ‘Что’.

Вот шаблон, который я пробовал :

 pat = 'what   w   w   w   ?'
  

но основная проблема заключается в том, что количество слов между ними не фиксировано. У некоторых их 3, а у некоторых даже 11-12, и если я использую предложение or или if в регулярном выражении, это становится огромным шаблоном без каких-либо результатов. Есть предложения о том, как решить такого рода проблемы?

Ответ №1:

Вам не нужен огонь.

  l = ["What blah foo?","What bar?","How blah foo?","How bar?"]

print [x for x in l if x.startswith("What")]

['What blah foo?', 'What bar?']
  

Использование re:

 l = ["What blah foo?","And What bar?","what bar?","How blah foo?","How bar?","What other foo","How other foo"]
for s in l:
    check= re.findall("^What .*?",s,re.IGNORECASE) # find string starting with "What/what" and ending with "?"
    if check:
        print check[0]
What blah foo?
what bar?
  

Ответ №2:

Другой способ, использующий re и понимание списка:

 list = ["What blah foo?","what bar?","How blah foo?","How bar?","another What?", "some what"]

print [x for x in list if re.match(r'^what.*?', x, re.I)]
  

[‘Что за бла-бла?’, ‘какой бар?’]