Поиск подстроки в начале и конце строки с помощью регулярного выражения
Задача:
Имеется игра «Саймон говорит». Инструктор «Саймон» говорит, что должны делать игроки в инструкции. Напишите функцию, которая принимает строку с инструкциями:
Если она начинается или заканчивается словами "Simon says";
Ваша функция должна возвращать строку "I" плюс то, что вы бы сделали: сами инструкции;
В противном случае верните "I won't do it!" .
Вы НЕ должны обрабатывать ввод или вызывать свою функцию, просто реализуйте ее.
С помощью regex101.com я описала первую часть функции:
^\s*(Simon says)
- фраза начинается с "Simon says";
(Simon says)\s*$
- фраза заканчивается "Simon says"
Но...я не знаю, как их вместе слепить??? Как мне их объединить, чтоб корректно работали?!
Код целиком с корявым регулярным выражением:
import re
phrase = r"^\s*(Simon says)(тут должно что-то быть) (Simon says)\s*$"
def what_to_do(instructions):
if bool(re.fullmatch(phrase, instructions)):
return("I" + instructions)
else:
return("I won't do it!")
Ответы (1 шт):
Вам не обязательно использовать регулярные выражения, чтобы выполнить эту задачу. Вы можете использовать методы строк .startswith() и .endswith():
def what_to_do(instructions):
if instructions.startswith("Simon says"):
return("I " + instructions[10:])
elif instructions.endswith("Simon says"):
return("I " + instructions[:-10])
else:
return("I won't do it!")
print(what_to_do("Simon says jump!"))
print(what_to_do("Please, jump!"))
Метод с использованием регулярных выражений:
import re
r = "(Simon says .*)|(.* Simon says)"
def what_to_do(instructions):
if bool(re.fullmatch(r, instructions)):
return("I " + re.sub("\s*Simon says\s*", "", instructions))
else:
return("I won't do it!")
print(what_to_do("Simon says jump!"))
print(what_to_do("Please, jump!"))
Объяснение регулярного выражения:
(Simon says .*)|(.* Simon says)
- Структура
()|()- выполняется условие либо в первой скобке, либо во второй. *.- Любое количество любых символов, в том числе и пробельных.