На этом шаге мы рассмотрим способы организации такого поиска.
Для поиска первого совпадения с шаблоном предназначены следующие функции и методы:
match(<Строка>[, <Начальная позиция>[, <Конечная позиция>]])
Если соответствие найдено, то возвращается объект Match, в противном случае возвращается значение None. Пример:
>>> import re >>> p = re.compile(r'[0-9]+') >>> print("Найдено" if p.match("str123") else "Нет") Нет >>> print("Найдено" if p.match("str123", 3) else "Нет") Найдено >>> print("Найдено" if p.match("123str") else "Нет") Найдено
Вместо метода match () можно воспользоваться функцией match (). Формат функции:
re.match(<Шаблон>, <Строка>[, <Модификатор>])
В параметре Шаблон указывается строка с регулярным выражением или скомпилированное регулярное выражение. В параметре Модификатор можно указать флаги, используемые в функции compile(). Если соответствие найдено, то возвращается объект Match, в противном случае возвращается значение None. Пример:
>>> p = r'[0-9]+' >>> print("Найдено" if re.match(p, "str123") else "Нет") Нет >>> print("Найдено" if re.match(p, "123str") else "Нет") Найдено >>> p = re.compile(r'[0-9]+') >>> print("Найдено" if re.match(p, "123str") else "Нет") Найдено
search(<Строка>[, <Начальная позиция>[, <Конечная позиция>]])
Если соответствие найдено, то возвращается объект Match, в противном случае возвращается значение None. Пример:
>>> p = re.compile(r'[0-9]+') >>> print("Найдено" if p.search("str123") else "Нет") Найдено >>> print("Найдено" if p.search("123str") else "Нет") Найдено >>> print("Найдено" if p.search("123str", 3) else "Нет") Нет
Вместо метода search () можно воспользоваться функцией search (). Формат функции:
re.search(<Шаблон>, <Строка>[, <Модификатор>] )
В параметре Шаблон указывается строка с регулярным выражением или скомпилированное регулярное выражение. В параметре Модификатор можно указать флаги, используемые в функции compile(). Если соответствие найдено, то возвращается объект Match, в противном случае возвращается значение None. Пример:
>>> p = re.compile(r'[0-9]+') >>> print("Найдено" if re.search(p, "str123") else "Нет") Найдено >>> p = re.compile(r'[0-9]+') >>> print("Найдено" if re.search(p, "123str") else "Нет") Найдено
fullmatch (<Строка> [, <Начальная позиция>[, <Конечная позиция>]])
Если соответствие найдено, то возвращается объект Match, в противном случае возвращается None. Примеры:
>>> p = re.compile(r'[Pp]ython') >>> print("Найдено" if p.fullmatch("Python") else "Нет") Найдено >>> print("Найдено" if p.fullmatch("py") else "Нет") Нет >>> print("Найдено" if p.fullmatch("PythonWare") else "Нет") Нет >>> print("Найдено" if p.fullmatch("PythonWare", 0, 6) else "Нет") Найдено
Вместо метода fullmatch() можно воспользоваться функцией fullmatch(). Формат функции:
re.fullmatch(<Шаблон>, <Строка>[, <Модификатор>])
В параметре Шаблон указывается строка с регулярным выражением или скомпилированное регулярное выражение. В параметре Модификатор можно указать флаги, используемые в функции compile(). Если строка полностью совпадает с шаблоном, возвращается объект Match, в противном случае возвращается значение None. Примеры:
>>> p = re.compile(r'[Pp]ython') >>> print("Найдено" if re.fullmatch(p, "Python") else "Нет") Найдено >>> print("Найдено" if re.fullmatch(p, "py") else "Нет") Нет
В качестве примера переделаем нашу программу (шаг 47) суммирования произвольного количества целых чисел, введенных пользователем, таким образом, чтобы при вводе строки вместо числа программа не завершалась с фатальной ошибкой. Предусмотрим также возможность ввода отрицательных целых чисел.
# -*- coding: utf-8 -*- import re print("Введите слово 'stop' для получения результата") summa = 0 p = re.compile(r"^[-]?[0-9]+$", re.S) while True: x = input("Введите число: ") if x == "stop": break # Выход из цикла if not p.search(x): print("Необходимо ввести число, а не строку!") continue x = int(x) # Преобразуем строку в число summa += x print("Сумма чисел равна: ", summa) input()
Результат работы приложения изображен на рисунке 1:
Рис.1. Результат работы приложения
На следующем шаге мы закончим изучение этого вопроса.