Рубрики
Без рубрики

Учебник Python Endswith () Можем ли мы использовать регулярные выражения?

Во время рефакторинга моего Python код я подумал о следующем вопросе. Можете ли вы использовать регулярное выражение с помощью метода Python Endswith ()? Простой ответ – нет, потому что если вы можете использовать Regex, вам даже не понадобится Endscith ()! Вместо этого используйте функцию Re.match (Regex, String) из модуля RE. Например, Re.match (“^. * (Кофе | Cafe) $”, Tweet) проверяет, занимается ли … Python Endswith () Учебное пособие – Можем ли мы использовать регулярные выражения? Подробнее “

Автор оригинала: Chris.

Во время рефакторинга моего Python код я подумал о следующем вопросе.

Можете ли вы использовать регулярное выражение с помощью метода Python Endswith ()?

Простой ответ нет Потому что если вы можете использовать Regex, вам даже не нужно Эндонсвит () Действительно Вместо этого используйте Re.match (Regex, String) Функция из Re модуль. Например, Re.match ("^. * (кофе | Кафе) $", Tweet) Проверяет, хранятся ли однострочная строка в переменной Tweet заканчивается либо «Кофе» или «Кафе» Отказ

На самом деле я понял, что используя Regex с Эндонсвит () Метод не имеет смысла. Почему? Если вы хотите использовать регулярные выражения, используйте функции из Re модуль. Вот что они были созданы для! Регулярные выражения бесконечно мощнее, чем Эндонсвит () Способ!

( Чтение времени 6 минут – или посмотрите видео, чтобы узнать о String.endswith () метод)

Вы хотите освоить сверхдержаву Regeex? Проверьте мою новую книгу Самый умный способ изучать регулярные выражения в Python С инновационным 3-ступенчатым подходом для активного обучения: (1) Изучение книги главы, (2) Решите головоломки кода и (3) Смотреть воспроизведение главы видео.

Как работает метод Python Endswith ()?

Вот обзор String.endswith Метод:

str.endswith(prefix[, start[, end]])
приставка требуется Строковое значение для поиска в начале String Str.
Начните по желанию Индекс первой позиции, где префикс должен быть проверен. Дефолт:.
конец по желанию Индекс последней позиции, где префикс должен быть проверен. По умолчанию: (ул) -1.

Давайте посмотрим на некоторые примеры, используя Python Эндонсвит метод. В каждом измените код, чтобы показать разные случаи использования. Начнем с самых основных сценариев.

Python Endswith () Самый основной пример

Предположим, у вас есть список строк, где каждая строка является Tweet.

tweets = ["to thine own self be true",
          "coffee break python",
          "i like coffee"]

Допустим, вы работаете в кофе, и вы хотите получить все твиты, которые заканчиваются строкой "кофе" . Вы будете использовать Эндонсвит Способ с одним аргументом:

>>> for tweet in tweets:
...   if tweet.endswith("coffee"):
...       print(tweet)
i like coffee

Эндонсвит Метод имеет два дополнительных аргумента: Начать и конец Отказ Вы можете использовать эти два аргумента, чтобы проверить, заканчивается ли подстрока от исходной строки вашего аргумента. Нужен пример, который объясняет оба аргумента?

Python Endswith () Дополнительные аргументы

Эндонсвит Метод имеет два дополнительных аргумента: Начать и конец Отказ Вы можете использовать их для определения диапазона индексов, чтобы проверить. По умолчанию, Эндонсвит проверяет всю строку. Давайте посмотрим на некоторые примеры.

Аргумент начала рассказывает Эндонсвит () Где начать поиск. Значение по умолчанию равно 0, то есть, он начинается в начале строки. Так, Следующий код выводит тот же результат, что и выше:

>>> for tweet in tweets:
...   if tweet.endswith("coffee", 0):
...       print(tweet)
i like coffee

Что произойдет, если мы установим Start = 8 ?

>>> for tweet in tweets:
...   if tweet.endswith("coffee", 8):
...       print(tweet)

Почему это не печатает что-нибудь? Призывая Найти () Метод, мы видим, что подстрока «Кофе» начинается с индекса 7.

>>> 'i like coffee'.find('coffee')
7

Но Tweet.endsswith («Кофе», 8) Начинает смотреть из индекса 8. Так что результат – Ложь И ничего не является напечатанный .

Давайте добавим еще один аргумент – конец Индекс – до последнего фрагмента:

>>> for tweet in tweets:
...   if tweet.startswith("coffee", 7, 9):
...       print(tweet)

Ничто не напечатано на консоли. Это потому, что мы ищем только в двух символах – начиная с индекса 7 (включительно) и заканчивая на индекс 9 (эксклюзив). Но мы ищем «Кофе» И это длиной 6 символов. Как 6> 2, Эндонсвит () Не находит никаких совпадений и ничего не возвращает.

Теперь, когда вы знаете все о Python’s Эндонсвит Метод, давайте вернемся к нашему оригинальному вопросу:

Могу ли я использовать регулярное выражение с помощью метода Python Endswith ()?

Нет. Эндонсвит () Способ не позволяет Регулярные выражения Отказ Вы можете найти только строку.

Регулярное выражение может описать бесконечный набор соответствующих строк. Например, '* A' соответствует всем словам, заканчивающимся «А» Отказ Это может быть вычислительно дорого. Итак, по причинам эффективности, имеет смысл, что Эндонсвит () не принимает регулярные выражения.

Связанная статья: Python Regex SuperPower – Ultimate Guide

Но правда ли это, что Эндонсвит только принимает одну строку в качестве аргумента? Нисколько. Можно сделать следующее:

Python Endswith () кортеж – Проверьте наличие нескольких строк

>>> for tweet in tweets:
...   if tweet.endswith(("coffee", "python")):
...       print(tweet)
coffee break python
i like coffee

Этот фрагмент печатает все строки, которые заканчиваются либо "Кофе" или "Python" Отказ Это тоже довольно эффективно. К сожалению, вы можете проверить только конечный набор аргументов. Если вам нужно проверить бесконечный набор, вы не можете использовать этот метод.

Что произойдет, если я передаю регулярное выражение для конспекта ()?

Давайте проверим, заканчивается ли Tweet любым версией "Кофе" нить. Другими словами, мы хотим применить Regex ". + COFF *" . Эта жадность соответствует любому персонажу один или несколько раз, то «Кофф» плюс произвольное количество персонажей. Таким образом, мы подходим строки, которые заканчиваются "Кофе" , "Кофе" и "Coffe" Отказ

>>> tweets = ["to thine own self be true",
              "coffee break python",
              "i like coffee",
              "i love coffe",
              "what's better than one coffee? two coffees!"]

>>> for tweet in tweets:
        if tweet.endswith(".+coff*"):
          print(tweet)
# No output :(

Это не работает. В регулярных выражениях * это подстановочный знак и представляет любой характер. Но в Эндонсвит () Метод, это просто означает звездный символ * . Так как ни один из твитов заканчивается буквами "COFF *" Питон ничего не печатает на экран.

Так что вы можете спросить:

Каковы альтернативы использования регулярных выражений в Endscith ()?

Есть одна альтернатива, которая проста и чистая: используйте Re модуль. Это встроенный модуль Python, созданный для работы с регулярными выражениями.

>>> import re
>>> tweets = ["to thine own self be true",
              "coffee break python",
              "i like coffee",
              "i love coffe",
              "what's better than one coffee? two coffees!"]
# Success!
>>> for tweet in tweets:
        if re.match(".+coff*", tweet):
          print(tweet)
i like coffee
i love coffe
what's better than one coffee? two coffees! 

Успех! Мы сейчас напечатали все твиты, которые мы ожидали. То есть все твиты, которые заканчиваются «Кофф» плюс произвольное количество персонажей.

Обратите внимание, что этот метод довольно медленный. Оценка регулярных выражений – дорогостоящая операция. Но ясность кода улучшилась, и мы получили результат, который мы хотели. Медленный и успешный лучше, чем быстрая и неудачная.

Функция Re.match () берет два аргумента. Во-первых, регулярное выражение должно быть сопоставлено. Во-вторых, строка, которую вы хотите найти. Если найден соответствующую подстроку, он возвращает Правда Отказ Если нет, он возвращает Ложь Отказ В этом случае возвращается Ложь для «Для того, чтобы само себя была правдой» и "Кофе-брейк Python" Отказ Это возвращает Правда что касается прочего.

Итак, давайте подведем итоги статьи.

Можете ли вы использовать регулярное выражение с помощью метода Python Endswith ()?

Нет, вы не можете использовать регулярное выражение с помощью Python Эндонсвит функция. Но вы можете использовать Python Регулярное модуль выражений Re вместо. Так же просто, как позвонить в функцию Матч (S1, S2) Отказ Это находит регулярное выражение S1 В строке S2 Отказ

Список Python Endswith ()

Учитывая, что мы можем пройти кортеж к Эндонсвит () , что произойдет, если мы передаем список?

>>> s = 'cobra'
>>> if s.endswith(['a', 'b', 'c']):
        print('yay!')
Traceback (most recent call last):
  File "", line 1, in 
TypeError: endswith first arg must be str or a tuple of str, not list

Python поднимает Типеррор Отказ Мы можем пройти только кортеж в Эндонсвит () Отказ Так что, если у нас есть список префиксов, мы хотим проверить, мы можем позвонить кортеж () прежде чем передавать его на Эндонсвит Отказ

>>> if s.endswith(tuple(['a', 'b', 'c'])):
        print('yay!')
yay!

Это хорошо работает и отлично работает. Тем не менее, один из ключевых функций Python – это его гибкость. Так можно получить тот же результат, не изменив наш список писем в кортеж? Конечно, это является!

У нас есть два варианта:

  1. любой () + Список понимания
  2. любой () + карта()

любой () Функция – это способ объединить логические или операторы вместе. Требуется один аргумент – условный условные заявления. Так вместо пишу

if s.endswith('a') or s.endswith('b') or s.endswith('c'):
    # some code

Мы пишем

# any takes 1 argument - an iterable
if any([s.endswith('a'),
        s.endswith('b'),
        s.endswith('c')]):
    # some code

Это намного приятнее читать и особенно полезно, если вы используете много математических утверждений. Мы можем улучшить это, сначала создавая список условий и передаваем это на любой () Отказ

letters = ['a', 'b', 'c']
conditions = [s.endswith(l) for l in letters]

if any(conditions):
    # do something

В качестве альтернативы, мы можем использовать карта вместо понимания списка

letters = ['a', 'b', 'c']
if any(map(s.endswith, letters)):
    # do something

Оба имеют одинаковый результат. Мы лично предпочитаем список потенциалов и думаю, что они более читательны. Но выберите, что вы предпочитаете.

Курс Python Regex

Инженеры Google являются регулярными мастерами. Система поисковой системы Google – это массивная Текстово-обработка двигателя Это извлекает значение из триллионов веб-страниц.

Инженеры Facebook являются регулярными мастерами экспрессии. Социальные сети, такие как Facebook, WhatsApp, и Instagram Подключите людей через Текстовые сообщения Отказ

Инженеры Amazon являются регулярными мастерами экспрессии. Ecommerce Giants корабля продуктов на основе Описания текстовых продуктов Отказ Регулярные выражения правит игре, когда текстовая обработка соответствует информатике.

Если вы тоже хотите стать регулярным мастером выражения, проверьте Самый полный курс Python Regex на планете:

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.

Оригинал: “https://blog.finxter.com/regex-endswith-python/”