Я сижу перед моим компьютером рефакторинга Python код и просто подумал о следующем вопросе:
Можете ли вы использовать регулярное выражение с Python string.startswith () Метод?
Короткий ответ: нет. string.startswith () Метод не позволяет регулярным экспрессионным входам. И вам это не нужно, потому что регулярные выражения уже могут проверять, запускается ли строка с узором с помощью Re.match (шаблон, строка) Функция из Re модуль.
На самом деле, вскоре после того, как задавать вопрос, я понял, что используя Regex с StartSwith () Метод не имеет смысла. Почему? Если вы хотите использовать регулярные выражения, используйте Re модуль. Регулярные выражения бесконечно мощнее, чем StartSwith () Способ!
Например, чтобы проверить, начинается ли строка с «Привет» Вы бы использовали Regex «Привет. *» Отказ Теперь вам не нужно StartSwith () Метод больше, потому что регельс уже заботится об этом.
Если вы уже узнали что-то из этого руководства, почему бы не присоединиться к моей бесплатной программе обучения Python? Я называю это Finxter Email Computer Science Academy -И только что: а Бесплатно, простое в использовании академия электронной почты что Обучает вас питон в небольших ежедневных дозах для начинающие и Плюсы Одинакота!
Как работает метод Python StartSwith ()?
Вот обзор string.startswith () Метод:
str.startswith(prefix[, start[, end]])
| приставка | обязательный | Строковое значение для поиска в начале String Str. |
| Начало | по желанию | Индекс первой позиции, где префикс должен быть проверен. По умолчанию:. |
| конец | по желанию | Индекс последней позиции, где префикс должен быть проверен. По умолчанию: (ул) -1. |
Давайте посмотрим на некоторые примеры, используя Python StartSwith () метод. В каждом измените код, чтобы показать разные случаи использования. Начнем с самых основных сценариев.
Связанная статья: Python Regex SuperPower – Ultimate Guide
Вы хотите освоить сверхдержаву Regeex? Проверьте мою новую книгу Самый умный способ изучать регулярные выражения в Python С инновационным 3-ступенчатым подходом для активного обучения: (1) Изучение книги главы, (2) Решите головоломки кода и (3) Смотреть воспроизведение главы видео.
Python Startswith () – самый просторный пример
Предположим, у вас есть список строк, где каждая строка является Tweet.
tweets = ["to thine own self be true",
"coffee break python",
"i like coffee"]Допустим, вы работаете в кофе, и вы хотите получить все твиты, которые начинаются со строки "Кофе" Отказ Мы будем использовать StartSwith () Способ с одним аргументом:
>>> for tweet in tweets:
... if tweet.startswith("coffee"):
... print(tweet)
coffee break python
Есть только один твит в нашем наборе данных, который начинается со строки "Кофе" Отказ Так что это единственный напечатан.
Python Startswith () – Дополнительные аргументы
Метод StartShith () имеет два дополнительных аргумента: Начать и конец Отказ Вы можете использовать их для определения диапазона индексов, чтобы проверить. По умолчанию StartShith проверяет всю строку. Давайте посмотрим на некоторые примеры.
Аргумент начала рассказывает StartSwith () Где начать поиск. Значение по умолчанию равно 0 I.e. Начинается в начале строки. Таким образом, следующий код выводит тот же результат, что и выше:
>>> for tweet in tweets:
... if tweet.startswith("coffee", 0):
... print(tweet)
coffee break pythonЧто произойдет, если мы установим?
>>> for tweet in tweets:
... if tweet.startswith("coffee", 7):
... print(tweet)
i like coffeeПочему это печатать «Я люблю кофе» ? Позвонив на Find () метод, мы видим, что подстрока «Кофе» начинается с индекса 7.
>>> 'i like coffee'.find('coffee')
7Следовательно, при проверке Tweet.Startswith («Кофе», 7) для твита «Я люблю кофе» результат это Правда Отказ
Добавим еще один аргумент – конечный индекс – к последнему фрагменту:
>>> for tweet in tweets:
... if tweet.startswith("coffee", 7, 9):
... print(tweet)Ничто не напечатано на консоли. Это потому, что мы ищем только более 2 символов – начиная с индекса 7 (включительно) и заканчивая на индексе 9 (эксклюзив). Но мы ищем «кофе», и это длиной 6 символов. Как 6> 2, StartSwith () Не находит никаких совпадений и ничего не возвращает.
Теперь, когда вы знаете все о методе StartSwith Python, давайте вернемся к нашему оригинальному вопросу:
Можете ли вы использовать регулярное выражение с помощью метода Python StartSwith ()?
Нет. Метод StartShith не позволяет регулярному выражениям. Вы можете найти только строку.
Регулярное выражение может описать бесконечный набор соответствующих строк. Например, 'A *' Соответствует всем словам, начинающим с «А» Отказ Это может быть вычислительно дорого. Итак, по причинам эффективности, имеет смысл, что StartSwith () не принимает регулярные выражения.
Вместо этого вы можете использовать Re.match () Метод:
Re.match ()
Re.match (шаблон, строка) Метод возвращает объект совпадения, если шаблон матчи В начале из строка Отказ Объект Match содержит полезную информацию, такую как соответствующие группы и соответствующие позиции. Дополнительный аргумент Флаги Позволяет настроить двигатель REGEX, например, игнорировать капитализацию.
Спецификация : Re.match (шаблон, строка)
Re.match () Метод имеет до трех аргументов.
шаблон: Регулярное выражение выражения, которое вы хотите сопоставить.строка: Строка, которую вы хотите искать шаблон.Флаги(Необязательный аргумент): более продвинутый модификатор, который позволяет настроить поведение функции. Хотите знать Как использовать эти флаги? Проверьте эту подробную статью на блог Finxter.
Возвращаемое значение:
Re.match () Метод возвращает объект совпадения. Вы можете узнать все о сопоставленных объектах и методе Re.match () в моем подробном руководстве в блоге:
[Полное руководство] Матч Python Regex
Вот видео в случае, если вы больше мультимодального учащегося:
Но правда ли это, что Startswith только принимает одну строку в качестве аргумента? Нисколько. Можно сделать следующее:
Python Startswith () кортеж – Проверьте наличие нескольких строк
>>> for tweet in tweets:
... if tweet.startswith(("coffee", "i")):
... print(tweet)
coffee break python
i like coffeeЭтот фрагмент печатает все строки, начинающиеся с "Кофе" или "Я" Отказ Это тоже довольно эффективно. К сожалению, вы можете проверить только конечный набор аргументов. Если вам нужно проверить бесконечный набор, вы не можете использовать этот метод.
Что произойдет, если я передаю регулярное выражение для StartSwith ()?
Давайте проверим, начинается ли Tweet с любой версией "Кофе" нить. Другими словами, мы хотим применить Regex "COFF *" так что мы подходим строки, как "Кофе" , "Кофе" и "Coffe" Отказ
>>> tweets = ["to thine own self be true",
"coffee break python",
"coffees are awesome",
"coffe is cool"]
>>> for tweet in tweets:
if tweet.startswith("coff*"):
print(tweet)
# No output :(Это не работает. В регулярных выражениях * это подстановочный знак и представляет любой характер. Но в методе Startswith () это просто означает звездный символ '*' Отказ Поскольку ни один из твитов не начинается с буквальной строки «COFF * ' Питон ничего не печатает на экран.
Так что вы можете спросить:
Каковы альтернативы использования регулярных выражений в StartSwith ()?
Существует одна альтернатива, которая проста и чистая: используйте модуль RE. Это встроенный модуль Python, созданный для работы с регулярными выражениями.
>>> import re
>>> tweets = ["to thine own self be true",
"coffee break python",
"coffees are awesome",
"coffe is cool"]
# Success!
>>> for tweet in tweets:
if re.match("coff*", tweet):
print(tweet)
coffee break python
coffees are awesome
coffe is coolУспех! Мы сейчас напечатали все твиты, которые мы ожидали. То есть все твиты, которые начинаются с «COFF» плюс произвольное количество персонажей.
Обратите внимание, что этот метод довольно медленный. Оценка регулярных выражений – дорогостоящая операция. Но ясность кода улучшилась, и мы получили результат, который мы хотели. Медленный и успешный лучше, чем быстрая и неудачная.
Функция Re.match () берет два аргумента. Во-первых, регулярное выражение должно быть сопоставлено. Во-вторых, строка, которую вы хотите найти. Если найден соответствующую подстроку, он возвращает true. Если нет, он возвращает false. В этом случае он возвращает false for “для того, чтобы самостоятельно был правдой и верным для остальных.
Итак, давайте подведем итоги статьи.
Резюме: Можете ли вы использовать регулярное выражение с помощью метода Startswith Python?
Нет, вы не можете использовать регулярное выражение с помощью Python Startswith функция. Но вы можете использовать Python Регулярное модуль выражений Re вместо. Так же просто, как позвонить в функцию Re.match (S1, S2) Отказ Это находит регулярное выражение S1 В строке S2 Отказ
Список Python StartSwith ()
Учитывая, что мы можем пройти кортеж до StartSwith () , что произойдет, если мы передаем список?
>>> s = 'a string!'
>>> if s.startswith(['a', 'b', 'c']):
print('yay!')
Traceback (most recent call last):
File "", line 1, in
TypeError: startswith first arg must be str or a tuple of str, not list Python поднимает в систему. Мы можем пройти только кортеж для начала (). Поэтому, если у нас есть список префиксов, которые мы хотим проверить, мы можем назвать кортеж (), прежде чем передавать его на StartShith.
>>> if s.startswith(tuple(['a', 'b', 'c'])):
print('yay!')
yay!Это хорошо работает и отлично работает. Тем не менее, один из ключевых функций Python – это его гибкость. Так можно получить тот же результат, не изменив наш список писем в кортеж? Конечно, это является!
У нас есть два варианта:
- Любой + список списков
- Любая + карта
Любая () функция – это способ совмещать логические или операторы вместе. Требуется один аргумент – условный условные заявления. Так что вместо письма
if s.startswith('a') or s.startswith('b') or s.startswith('c'):
# some codeМы пишем
# any takes 1 argument - an iterable
if any([s.startswith('a'),
s.startswith('b'),
s.startswith('c')]):
# some codeЭто намного приятнее читать и особенно полезно, если вы используете много математических утверждений. Мы можем улучшить это, сначала создавая список условий и передаем это к любому ().
letters = ['a', 'b', 'c']
conditions = [s.startswith(l) for l in letters]
if any(conditions):
# do somethingВ качестве альтернативы, мы можем использовать карту вместо понимания списка
letters = ['a', 'b', 'c']
if any(map(s.startswith, letters)):
# do somethingОба имеют одинаковый результат. Мы лично предпочитаем список потенциалов и думаю, что они более читательны. Но выберите, что вы предпочитаете.
Курс Python Regex
Инженеры Google являются регулярными мастерами. Система поисковой системы Google – это массивная Текстово-обработка двигателя Это извлекает значение из триллионов веб-страниц.
Инженеры Facebook являются регулярными мастерами экспрессии. Социальные сети, такие как Facebook, WhatsApp, и Instagram Подключите людей через Текстовые сообщения Отказ
Инженеры Amazon являются регулярными мастерами экспрессии. Ecommerce Giants корабля продуктов на основе Описания текстовых продуктов Отказ Регулярные выражения правит игре, когда текстовая обработка соответствует информатике.
Если вы тоже хотите стать регулярным мастером выражения, проверьте Самый полный курс Python Regex на планете:
Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.
Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.
Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.