регулярное выражение номер телефона python
Python RegEx: практическое применение регулярок
Python RegEx: практическое применение регулярок
Рассмотрим регулярные выражения в Python, начиная синтаксисом и заканчивая примерами использования.
Примечание Вы читаете улучшенную версию некогда выпущенной нами статьи.
Основы регулярных выражений
Регулярками называются шаблоны, которые используются для поиска соответствующего фрагмента текста и сопоставления символов.
Грубо говоря, у нас есть input-поле, в которое должен вводиться email-адрес. Но пока мы не зададим проверку валидности введённого email-адреса, в этой строке может оказаться совершенно любой набор символов, а нам это не нужно.
Чтобы выявить ошибку при вводе некорректного адреса электронной почты, можно использовать следующее регулярное выражение:
По сути, наш шаблон — это набор символов, который проверяет строку на соответствие заданному правилу. Давайте разберёмся, как это работает.
Синтаксис RegEx
Синтаксис у регулярок необычный. Символы могут быть как буквами или цифрами, так и метасимволами, которые задают шаблон строки:
Также есть дополнительные конструкции, которые позволяют сокращать регулярные выражения:
Для чего используются регулярные выражения
Синтаксис таких выражений в основном стандартизирован, так что вам следует понять их лишь раз, чтобы использовать в любом языке программирования.
Примечание Не стоит забывать, что регулярные выражения не всегда оптимальны, и для простых операций часто достаточно встроенных в Python функций.
Хотите узнать больше? Обратите внимание на статью о регулярках для новичков.
Регулярные выражения в Python
А вот наиболее популярные методы, которые предоставляет модуль:
Рассмотрим каждый из них подробнее.
re.match(pattern, string)
Этот метод ищет по заданному шаблону в начале строки. Например, если мы вызовем метод match() на строке «AV Analytics AV» с шаблоном «AV», то он завершится успешно. Но если мы будем искать «Analytics», то результат будет отрицательный:
Искомая подстрока найдена. Чтобы вывести её содержимое, применим метод group() (мы используем «r» перед строкой шаблона, чтобы показать, что это «сырая» строка в Python):
Теперь попробуем найти «Analytics» в данной строке. Поскольку строка начинается на «AV», метод вернет None :
Также есть методы start() и end() для того, чтобы узнать начальную и конечную позицию найденной строки.
Эти методы иногда очень полезны для работы со строками.
re.search(pattern, string)
Метод search() ищет по всей строке, но возвращает только первое найденное совпадение.
re.findall(pattern, string)
re.split(pattern, string, [maxsplit=0])
Этот метод разделяет строку по заданному шаблону.
В примере мы разделили слово «Analytics» по букве «y». Метод split() принимает также аргумент maxsplit со значением по умолчанию, равным 0. В данном случае он разделит строку столько раз, сколько возможно, но если указать этот аргумент, то разделение будет произведено не более указанного количества раз. Давайте посмотрим на примеры Python RegEx:
Мы установили параметр maxsplit равным 1, и в результате строка была разделена на две части вместо трех.
re.sub(pattern, repl, string)
Ищет шаблон в строке и заменяет его на указанную подстроку. Если шаблон не найден, строка остается неизменной.
re.compile(pattern, repl, string)
Мы можем собрать регулярное выражение в отдельный объект, который может быть использован для поиска. Это также избавляет от переписывания одного и того же выражения.
До сих пор мы рассматривали поиск определенной последовательности символов. Но что, если у нас нет определенного шаблона, и нам надо вернуть набор символов из строки, отвечающий определенным правилам? Такая задача часто стоит при извлечении информации из строк. Это можно сделать, написав выражение с использованием специальных символов. Вот наиболее часто используемые из них:
Оператор | Описание |
---|---|
. | Один любой символ, кроме новой строки \n. |
? | 0 или 1 вхождение шаблона слева |
+ | 1 и более вхождений шаблона слева |
* | 0 и более вхождений шаблона слева |
\w | Любая цифра или буква (\W — все, кроме буквы или цифры) |
\d | Любая цифра 9 (\D — все, кроме цифры) |
\s | Любой пробельный символ (\S — любой непробельный символ) |
\b | Граница слова |
[..] | Один из символов в скобках ([^..] — любой символ, кроме тех, что в скобках) |
\ | Экранирование специальных символов (\. означает точку или \+ — знак «плюс») |
^ и $ | Начало и конец строки соответственно |
От n до m вхождений ( — от 0 до m) | |
a|b | Соответствует a или b |
() | Группирует выражение и возвращает найденный текст |
\t, \n, \r | Символ табуляции, новой строки и возврата каретки соответственно |
Больше информации по специальным символам можно найти в документации для регулярных выражений в Python 3.
Перейдём к практическому применению Python регулярных выражений и рассмотрим примеры.
Задачи
Вернуть первое слово из строки
Теперь попробуем достать каждое слово (используя * или + )
И снова в результат попали пробелы, так как * означает «ноль или более символов». Для того, чтобы их убрать, используем + :
Теперь вытащим первое слово, используя ^ :
Вернуть первые два символа каждого слова
Вариант 2: вытащить два последовательных символа, используя символ границы слова ( \b ):
Вернуть домены из списка email-адресов
Сначала вернём все символы после «@»:
Как видим, части «.com», «.in» и т. д. не попали в результат. Изменим наш код:
Второй вариант — вытащить только домен верхнего уровня, используя группировку — ( ) :
Извлечь дату из строки
Используем \d для извлечения цифр.
Для извлечения только года нам опять помогут скобки:
Извлечь слова, начинающиеся на гласную
Для начала вернем все слова:
А теперь — только те, которые начинаются на определенные буквы (используя [] ):
Выше мы видим обрезанные слова «argest» и «ommunity». Для того, чтобы убрать их, используем \b для обозначения границы слова:
Также мы можем использовать ^ внутри квадратных скобок для инвертирования группы:
В результат попали слова, «начинающиеся» с пробела. Уберем их, включив пробел в диапазон в квадратных скобках:
Проверить формат телефонного номера
Номер должен быть длиной 10 знаков и начинаться с 8 или 9. Есть список телефонных номеров, и нужно проверить их, используя регулярки в Python:
Разбить строку по нескольким разделителям
Также мы можем использовать метод re.sub() для замены всех разделителей пробелами:
Извлечь информацию из html-файла
Пример содержимого html-файла:
С помощью регулярных выражений в Python это можно решить так (если поместить содержимое файла в переменную test_str ):
Хинт для программистов: если зарегистрируетесь на соревнования Huawei Cup, то бесплатно получите доступ к онлайн-школе для участников. Можно прокачаться по разным навыкам и выиграть призы в самом соревновании.
Перейти к регистрации
Примеры применения регулярных выражений в Python
Регулярные выражения, также называемые regex, синтаксис или, скорее, язык для поиска, извлечения и работы с определенными текстовыми шаблонами большего текста. Он широко используется в проектах, которые включают проверку текста, NLP (Обработка естественного языка) и интеллектуальную обработку текста.
Введение в регулярные выражения
Эта статья разделена на 2 части.
Что такое шаблон регулярного выражения и как его скомпилировать?
Шаблон регулярного выражения представляет собой специальный язык, используемый для представления общего текста, цифр или символов, извлечения текстов, соответствующих этому шаблону.
В конце этой статьи вы найдете больший список шаблонов регулярных выражений. Но прежде чем дойти до этого, давайте посмотрим, как компилировать и работать с регулярными выражениями.
Вышеупомянутый код импортирует модуль re и компилирует шаблон регулярного выражения, который соответствует хотя бы одному или нескольким символам пробела.
Как разбить строку, разделенную регулярным выражением?
Рассмотрим следующий фрагмент текста.
У меня есть три курса в формате “[Номер курса] [Код курса] [Название курса]”. Интервал между словами разный.
Передо мной стоит задача разбить эти три предмета курса на отдельные единицы чисел и слов. Как это сделать?
Их можно разбить двумя способами:
Оба эти метода работают. Но какой же следует использовать на практике?
Если вы намерены использовать определенный шаблон несколько раз, вам лучше скомпилировать регулярное выражение, а не использовать re.split множество раз.
Поиск совпадений с использованием findall, search и match
Предположим, вы хотите извлечь все номера курсов, то есть 100, 213 и 156 из приведенного выше текста. Как это сделать?
Что делает re.findall()?
В приведенном выше коде специальный символ \ d является регулярным выражением, которое соответствует любой цифре. В этой статье вы узнаете больше о таких шаблонах.
Добавление к нему символа + означает наличие по крайней мере 1 числа.
В итоге, метод findall извлекает все вхождения 1 или более номеров из текста и возвращает их в список.
re.search() против re.match()
Аналогично, regex.match() также возвращает объект соответствия. Но разница в том, что он требует, чтобы шаблон находился в начале самого текста.
В качестве альтернативы вы можете получить тот же результат, используя метод group() для объекта соответствия.
Как заменить один текст на другой, используя регулярные выражения?
Из вышеприведенного текста я хочу удалить все лишние пробелы и записать все слова в одну строку.
Предположим, вы хотите избавиться от лишних пробелов и выводить записи курса с новой строки. Чтобы это сделать, используйте регулярное выражение, которое пропускает символ новой строки, но учитывает все другие пробелы.
Группы регулярных выражений
Группы регулярных выражений — функция, позволяющая извлекать нужные объекты соответствия как отдельные элементы.
Предположим, что я хочу извлечь номер курса, код и имя как отдельные элементы. Не имея групп мне придется написать что-то вроде этого.
Давайте посмотрим, что получилось.
Я скомпилировал 3 отдельных регулярных выражения по одному для соответствия номерам курса, коду и названию.
Для номера курса, шаблон 2+ указывает на соответствие всем числам от 0 до 9. Добавление символа + в конце заставляет найти по крайней мере 1 соответствие цифрам 0-9. Если вы уверены, что номер курса, будет иметь ровно 3 цифры, шаблон мог бы быть 6 <3>.
Для кода курса, как вы могли догадаться, [А-ЯЁ] <3>будет совпадать с 3 большими буквами алфавита А-Я подряд (буква “ё” не включена в общий диапазон букв).
Для названий курса, [а-яА-ЯёЁ] <4,>будем искать а-я верхнего и нижнего регистра, предполагая, что имена всех курсов будут иметь как минимум 4 символа.
Можете ли вы догадаться, каков будет шаблон, если максимальный предел символов в названии курса, скажем, 20?
Теперь мне нужно написать 3 отдельные строки, чтобы разделить предметы. Но есть лучший способ. Группы регулярных выражений.
Поскольку все записи имеют один и тот же шаблон, вы можете создать единый шаблон для всех записей курса и внести данные, которые хотите извлечь из пары скобок ().
Что такое “жадное” соответствие в регулярных выражениях?
По умолчанию, регулярные выражения должны быть жадными. Это означает, что они пытаются извлечь как можно больше, пока соответствуют шаблону, даже если требуется меньше.
Давайте рассмотрим пример фрагмента HTML, где нам необходимо получить тэг HTML.
Вместо совпадения до первого появления ‘>’, которое, должно было произойти в конце первого тэга тела, он извлек всю строку. Это по умолчанию “жадное” соответствие, присущее регулярным выражениям.
Наиболее распространенный синтаксис и шаблоны регулярных выражений
Теперь, когда вы знаете как пользоваться модулем re, давайте рассмотрим некоторые обычно используемые шаблоны подстановок.
Основной синтаксис
Модификаторы
$ | Конец строки |
^ | Начало строки |
ab|cd | Соответствует ab или de. |
[ab-d] | Один символ: a, b, c, d |
[^ab-d] | Любой символ, кроме: a, b, c, d |
() | Извлечение элементов в скобках |
(a(bc)) | Извлечение элементов в скобках второго уровня |
Повторы
[ab] | 2 непрерывных появления a или b |
[ab] | от 2 до 5 непрерывных появления a или b |
[ab] | 2 и больше непрерывных появления a или b |
+ | одно или больше |
* | 0 или больше |
? | 0 или 1 |
Примеры регулярных выражений
Любой символ кроме новой строки
Точки в строке
Любая цифра
Все, кроме цифры
Любая буква или цифра
Все, кроме букв и цифр
Только буквы
Соответствие заданное количество раз
1 и более вхождений
Любое количество вхождений (0 или более раз)
0 или 1 вхождение
Граница слова
Границы слов \b обычно используются для обнаружения и сопоставления началу или концу слова. То есть, одна сторона является символом слова, а другая сторона является пробелом и наоборот.
Практические упражнения
Давайте немного попрактикуемся. Пришло время открыть вашу консоль. (Варианты ответов здесь)
1. Извлеките никнейм пользователя, имя домена и суффикс из данных email адресов.
2. Извлеките все слова, начинающиеся с ‘b’ или ‘B’ из данного текста.
3. Уберите все символы пунктуации из предложения
4. Очистите следующий твит, чтобы он содержал только одно сообщение пользователя. То есть, удалите все URL, хэштеги, упоминания, пунктуацию, RT и CC.
Ответы
Надеемся, информация была вам полезна. Стояла цель — познакомить вас с примерами регулярных выражений легким и доступным для запоминания способом.
Проверка и форматирование телефонных номеров в Python с помощью телефонных номеров
В этом уроке мы узнаем, как анализировать, проверять и извлекать телефонные номера в Python с помощью библиотеки телефонных номеров.
Вступление
В этом уроке мы узнаем, как анализировать, проверять и извлекать телефонные номера, а также как извлекать дополнительную информацию из телефонных номеров, например, информацию о носителе, часовом поясе или геокодере.
Использование библиотеки очень прямолинейно, и обычно она используется следующим образом:
Давайте начнем с настройки нашей среды и установки библиотеки.
Установка телефонных номеров
Во-первых, давайте создадим и активируем нашу виртуальную среду:
Затем мы устанавливаем библиотеку Python Phonenumbers:
Теперь мы готовы начать знакомство с библиотекой телефонных номеров.
Разбор телефонных номеров с помощью Python phonenumbers
Мы можем разобрать номер телефона с помощью метода parse() :
Метод phonenumbers.parse() принимает строку телефонного номера в качестве обязательного аргумента. Вы также можете передать информацию о стране в формате ISO Alpha-2 в качестве необязательного аргумента. Возьмем, к примеру, следующий код:
Теперь, когда мы правильно проанализировали наш номер телефона, давайте перейдем к проверке.
Проверка телефонных номеров с помощью Python Phonenumbers
Телефонные номера имеют два метода проверки действительности телефонного номера. Главное отличие этих методов-скорость и точность.
Чтобы уточнить, давайте начнем с is_possible_number() :
И выход будет таким:
Теперь давайте используем тот же номер, но на этот раз с помощью метода is_valid_number() :
Даже если входные данные были одинаковыми, результат будет другим:
Причина в том, что метод is_possible_number() быстро угадывает действительность телефонного номера, проверяя длину анализируемого номера, в то время как метод is_valid_number() выполняет полную проверку, проверяя длину, префикс телефонного номера и регион.
Извлечение и форматирование телефонных номеров с помощью Python Phonenumbers
Давайте используем PhoneNumberMatcher со случайным текстом:
Это приведет к печати соответствующих телефонных номеров вместе с их индексом в строке:
Возможно, вы заметили, что наш номер отформатирован в стандартизированном международном формате и разделен пробелами. Это не всегда может быть так в реальных сценариях. Вы можете получить свой номер в других форматах, например, разделенный на тире или отформатированный в национальном (а не международном) формате.
Давайте проверим метод PhoneNumberMatcher() с другими форматами телефонных номеров:
Это привело бы к выходу:
Несмотря на то, что телефонные номера встроены глубоко в текст с различными форматами с другими номерами, PhoneNumberMatcher успешно возвращает телефонные номера с большой точностью.
Помимо извлечения данных из текста, мы также можем захотеть получить цифры одну за другой от пользователя. Представьте, что пользовательский интерфейс вашего приложения работает аналогично современным мобильным телефонам и форматирует телефонные номера по мере ввода. Например, на вашей веб-странице вы можете передать данные в свой API с каждым событием onkeyup и использовать AsYouTypeFormatter() для форматирования номера телефона с каждой входящей цифрой.
Не все вводимые пользователем данные происходят так, как они вводятся. Некоторые формы имеют простые поля ввода текста для телефонных номеров. Однако это не обязательно означает, что мы будем вводить данные в стандартном формате.
Начнем с национального форматирования:
Это вернет хорошо разнесенную строку телефонного номера с национальным форматом:
Теперь давайте попробуем отформатировать национальный номер как в международном формате:
Приведенный выше код вернет хорошо разнесенную строку телефонного номера:
Это очень полезно, когда вы хотите передать номер в фоновый API. API нередко ожидают, что телефонные номера будут строками без интервалов.
Получить дополнительную информацию по номеру телефона
Номер телефона загружается с данными о пользователе, которые могут вас заинтересовать. Вы можете использовать различные API или конечные точки API в зависимости от оператора конкретного телефонного номера, поскольку это играет определенную роль в стоимости продукта. Возможно, вы захотите отправлять уведомления о рекламных акциях в зависимости от часового пояса вашего клиента (номера телефона), чтобы не отправлять ему сообщение посреди ночи. Или вы можете получить информацию о местоположении телефонного номера, чтобы предоставить соответствующую информацию. Библиотека телефонных номеров предоставляет необходимые инструменты для удовлетворения этих потребностей.
Давайте попробуем это с нашим предыдущим поддельным номером:
При этом будет распечатана страна происхождения телефонного номера:
Короткие языковые названия довольно интуитивно понятны. Давайте попробуем получить вывод на русском языке:
А вот вывод на котором написано Великобритания по русски:
Вы можете попробовать его с другими языками ваших предпочтений, такими как “de”, “fr”, “zh” и т. Д.
Как уже упоминалось ранее, вы можете сгруппировать свои телефонные номера по их операторам, так как в большинстве случаев это повлияет на стоимость. Чтобы уточнить, библиотека телефонных номеров, вероятно, предоставит большинство имен операторов точно, но не на 100%.
Сегодня в большинстве стран можно получить свой номер от одного оператора, а затем перенести тот же номер на другой оператор, оставив номер телефона точно таким же. Поскольку Телефонные номера-это всего лишь автономная библиотека Python, обнаружить эти изменения невозможно. Поэтому лучше всего подходить к названиям носителей как к эталону, а не как к факту.
Мы будем использовать метод name_for_number() из класса carrier :
При этом будет отображаться исходный носитель телефонного номера, если это возможно:
Примечание : Как указано в оригинальных документах Python Phonenumbers, информация о носителе доступна для мобильных номеров в некоторых странах, но не во всех.
Другой важной частью информации о телефонном номере является его часовой пояс. Метод time_zones_for_number() вернет список часовых поясов, к которым принадлежит это число. Мы импортируем его из номера телефонов.часовой пояс :
Это приведет к печати следующих часовых поясов:
На этом наш учебник по Python Phonenumbers заканчивается.
Вывод
Регулярные выражения: извлечение из файла номеров телефонов
Извлечение текста из строки. Регулярные выражения
Здравствуйте! Нужен код, который выбирает в ячейке слово или словосочетание. Вместо: "Стол красный.
Регулярные выражения: извлечение ссылок нужной разрядности
Здравствуйте! Подскажите пожалуйста в чём ошибка? Есть рег.выр: ^.*(http\:.*(msu|exe))|(\|\].
Регулярные выражения: извлечение даты и времени из строки
Какое регулярное выражение поможет вытащить из строки типа "Arrival Time: Feb 23, 2019.
Вложения
Архив WinRAR.rar (7.2 Кб, 38 просмотров) |
Решение
Решение
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Чтение файла, регулярные выражения
Приветствую всех. Как можно открыть текстовый файл, применить к содержимому эти регулярные.
Сортировка номеров телефонов
Привет, друзья-программисты! Очень нужна Ваша помощь! Не так давно в сфере программирования.
Чтение файла в потоке и регулярные выражения
Доброго времени! Дали задание написать небольшой парсер из файла. Файл не текстовый, а результат.
Регулярные выражения sql (путь файла)
Всем доброго времени суток! Требуется с помощью регулярных выражений (или, если есть другой.
Поиск по базе номеров телефонов
Есть база номеров телефонов, нужно узнать владельца каждого номера телефона через Facebook (если он.