
Все мы помним, как выполняли поиск, нажимая Ctrl + F для определенного текста в длинном документе или создавая длинные программы, которые сообщают, относится ли конкретный текст к определенному шаблону или нет, но регулярным выражениям, или мы называем это как «Регулярное выражение», продвигая его на один шаг вперед. со встроенным в Python модулем «re».
Для лучшего понимания давайте запрограммируем программу, которая сообщает, является ли строка ввода номером телефона или нет.
Теперь индийский телефонный номер имеет формат +91 3672984623, с разбивкой на индийский телефонный номер «+91» (индийский код набора), за которым следует пробел, а затем 10 цифр.
Наивный подход будет примерно таким:
Приведенный выше код принимает число как ввод от пользователя в текстовой переменной, а затем передает его через различные контрольные точки, которые содержат все условия сбоя.
+91 3672984623, поскольку ввод текста вернет True, однако, если ввести «rishabh 3823», вернется False.
Но что, если в нашем номере телефона нет кода страны, это все еще номер телефона или, скажем, стационарный номер, наша программа не сможет распознать эти текстовые шаблоны. Конечно, мы можем добавить еще несколько строк кода для этих шаблонов, но есть гораздо более простой способ выполнить работу даже с относительно меньшим количеством строк.
Регулярные выражения намного сложнее кодировать, например, ‘/ d’ обозначает цифровой символ, то есть любое число от 0 до 9, \ s обозначает символ пробела / табуляции / новой строки.
регулярное выражение r ’\ + \ d {2} \ s \ d {10}’ будет искать тот же шаблон, что и наш приведенный выше код, во многих других строках.
Это просто означает, что наш шаблон представляет собой «+», за которым следуют 2 цифры, затем пробел и далее 10 цифр.
Сначала это может показаться сложным, но подождите, вы поймете все о регулярных выражениях к концу этого.
СОЗДАНИЕ ОБЪЕКТА REGEX:
Нам нужно импортировать объект регулярного выражения в начале каждого нового скрипта, иначе мы получим NameError: name ‘re’ не определено.
Чтобы импортировать функцию регулярного выражения в Python, просто напишите
››› импортировать повторно
Передача строкового значения, представляющего ваше регулярное выражение, в re.compile () возвращает объект шаблона Regex
Теперь нам нужно создать объект регулярного выражения и объект соответствия, который ищет указанный выше шаблон в строке.
Вывод: найден номер телефона: +91 3672984623
ПЕРЕХОД НА СЛЕДУЮЩИЙ УРОВЕНЬ
ПАРЕНТЕЗ [()]
Круглые скобки в регулярных выражениях используются для создания групп. Предположим, мы хотим отделить код страны от остальной части числа, тогда мы можем просто добавить круглые скобки вокруг кода страны, чтобы отметить его как группу.
ВЫХОД: +91
4745484124
ХАРАКТЕР ТРУБЫ (|)
Символ вертикальной черты в регулярных выражениях используется для соответствия одной из многих возможных групп.
Например, если мы хотим найти такие строки, как «страна чудес», «чудо-женщина», «чудо-колесо». Мы видим, что слово «чудо» является общим для всех строк, поэтому мы можем сгруппировать их, используя вертикальную черту (|).
Wonderregex = re.compile (r’wonder (земля | женщина | колесо))
Приведенный выше код будет просто искать все возможные комбинации, возможные внутри wonderregex, во входных данных в нашем matchobj.
ВОПРОСИТЕЛЬНЫЙ ЗНАК(?)
Вопросительный знак используется для поиска нулевого или однократного шаблона во входной строке, то есть? символ помечает группу, которая предшествует ему, как необязательную часть шаблона.
Например
ВЫХОД: Бэтмен
Если вам нужно сопоставить фактический знак вопроса, экранируйте его с помощью \ ?.
ЗВЕЗДА ИЛИ ЗВЕЗДА (*)
Звездочка используется для поиска шаблона, равного нулю или более, во входной строке, то есть символ * отмечает группу, которая ему предшествует, может встречаться 0 или столько раз, сколько является частью шаблона.
Например, давайте снова рассмотрим пример с Бэтменом.
Продукт: Бэтмен
женщина-летучая мышь
batwowowowoman
Если вам нужно сопоставить фактический символ звездочки, экранируйте его с помощью \ *.
ПЛЮС (+)
Плюс используется для поиска шаблона один или несколько раз во входной строке, то есть символ + указывает на то, что предшествующая ему группа должна появляться не менее одного раза 0 или не более того, сколько раз соответствует части шаблона.
Например
Вывод:
женщина-летучая мышь
batwowowoman
AttributeError: объект «NoneType» не имеет атрибута «группа»
Если вам нужно сопоставить фактический символ звездочки, экранируйте его с помощью \ +.
ПОВТОРЯЮЩАЯСЯ ГРУППА С ПОДВЕСКОЙ ({n})
Фигурные скобки используются для поиска группы ровно «n» №. раз.
Шаблон (r ’(ha) {3}’) будет искать ha в строке ровно 3 раза. «Хахаха» вернет объект группы, однако «хаха» вызовет ошибку атрибута.
Не только одно число, мы также можем указать диапазон, как мы это делаем в функции диапазона или в срезах списка, разделяя минимальное значение и максимальное значение, разделенные «,» внутри фигурных скобок. {X, y}. Указанный шаблон будет искать не менее x раз и не более y раз.
Например, (r’ha {2,5} ’) будет соответствовать haha, hahaha, hahahahah и hahahahaha.
КЛАССЫ ПЕРСОНАЖЕЙ REGEX
В начале статьи мы узнали, что \ d обозначает любой цифровой символ от 0 до 9, а \ s обозначает любой пробел, табуляцию или символ новой строки, но это еще не все, классов распознавания символов гораздо больше.
\d
Любая цифровая цифра от 0 до 9.
\D
Любой символ, не являющийся числовой цифрой от 0 до 9.
\w
Любая буква, цифра или символ подчеркивания
\W
Любой символ, кроме буквы, цифры или символа подчеркивания.
\s
Любой пробел, табуляция или символ новой строки
\S
Любой символ, кроме пробела, табуляции или новой строки
Мы также можем создать наш собственный класс символов регулярного выражения, поскольку наш шаблон может не лежать в этих широких классах символов.
Например, мы хотим найти все гласные (строчные и прописные), тогда мы можем создать наш собственный класс символов.
Вывод:
[‘a’,’a’,’e’,’a’,’e’,’i’,’e’,’e’]
Метод findall () возвращает список всех возможных шаблонов во входной строке и не имеет объекта группы