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

Regex Специальные персонажи – Примеры в Python Re

Регулярные выражения являются странным животным. Многие студенты считают их трудно понять – ты? https://youtu.be/hsy0xea-8p8 Я понял, что основной причиной этого – это просто, что они не понимают специальные символы Regeex. Чтобы построить его по-разному: понять специальные символы и все остальное в пространстве Regex, намного легче … Regex Специальные символы – Примеры в Python Read Подробнее »

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

Регулярные выражения являются странным животным. Многие студенты считают их трудно понять – ты?

Я понял, что основной причиной этого – это просто, что они не понимают специальные персонажи Regeex. Чтобы построить это по-другому: понять специальные символы и все остальное в пространстве Regex, вам будет намного легче.

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

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

Регулярные выражения построены из символов. Есть Два типа персонажей: буквальные персонажи и Специальные персонажи Отказ

Буквальные персонажи

Давайте начнем с абсолютного первого, что вам нужно знать с регулярными выражениями: регулярное выражение (короткое: Regex ) ищет данный шаблон в данной строке.

Что узор? В самой основной форме шаблон может быть буквальным характером. Так что буквальные персонажи «А» , 'b' и 'C' Все ли действительные шаблоны Regex.

Например, вы можете искать рисунок Regex «А» В строке «Hello World» Но это не найдет Матч Отказ Вы также можете искать шаблон «А» В строке «Привет женщина» И есть матч: второй последний символ в строке.

Основываясь на простом понимании, что буквальный символ является действительным рисунком Regex, вы обнаружите, что комбинация буквальных символов также является действительным рисунком Regex. Например, рисунок Regex 'a' соответствует последним двум символам в строке «Привет женщина» Отказ

Резюме : Регулярные выражения построены из символов. Важным классом персонажей являются буквальными персонажами. В принципе , вы можете использовать все Unicode Литеральные символы в вашем рисунке Regex.

Специальные символы

Однако мощность регулярных выражений происходит из их возможности абстракции. Вместо написания Набор символов [abcdefghijklmnopqrstuvwxyz] ты бы написал [A-Z] или даже \ W . Отказ Последнее является специальным персонажем Regex – и плюсы знают их наизусть. На самом деле, эксперты Regex редко соответствуют буквальным персонажам. В большинстве случаев они используют более продвинутые конструкции или специальные символы по различным причинам, таким как краткость, выразительность или общность.

Так какие специальные символы вы можете использовать в своих шаблонах Regex?

Давайте посмотрим на следующую таблицу, которая содержит все специальные символы в Python Re Пакет для регулярной обработки выражений.

Символ Newline – это не специальный символ, особенно для регулярного выражения, это на самом деле один из наиболее широко используемых стандартных символов. Тем не менее, вы увидите новенький характер так часто, что я просто не мог написать этот список без его включения. Например, Regex ‘Hello \ Nworld’ соответствует строке, где строка «Hello» помещается в одну строку, а строку «Мир» помещается во вторую строку. \n
Табличный символ, как символ Newline, а не символ «определенного для Regex». Это просто кодирует табличное пространство «», которое отличается от последовательности пробелов (даже если она не выглядит отличаться здесь). Например, регенс «Hello \ N \ Tworld» соответствует строке, которая состоит из «Hello» в первой строке и «в мире» во второй строке (с лидирующей вкладкой. \t
Персонаж пробелов, в отличие от новой линии символа, специальный символ библиотек Regex. Вы также найдете его во многих других языках программирования. Проблема в том, что вы часто не знаете, какой тип пробела используется: табличные символы, простые пробелы или даже новинки. Персонаж пробела «\ S» просто совпадает с ними из них. Например, мир Regex ‘\ S * Hello \ S + Morls соответствует строке «White», а также «Hello World». \s
Персонаж Whitespace-отрицания соответствует всем, что не совпадает. \S
Слово символ Regex упрощает обработку текста значительно. Он представляет собой класс всех символов, используемых в типичных словах (A-Z, A-Z, 0-9 и «_»). Это значительно упрощает написание комплексных регулярных выражений. Например, Regex ‘\ W +’ соответствует строкам «Hello», «Bye», «Python» и «Python_is_Great». \w
Слово-символ-отрицание. Это соответствует любому символу, который не является символом слова. \W
Граница слова также является специальным символом, используемым во многих инструментах Regex. Вы можете использовать его, чтобы соответствовать, как указано имя, граница между символом слова (\ W) и неслого (\ W) символом. Но обратите внимание, что он соответствует только пустой строке! Вы можете спросить: почему это существует, если он не соответствует ни одного персонажа? Причина в том, что она не «потребляет» характер прямо или сразу после слова. Таким образом, вы можете искать целые слова (или части слов) и вернуть только слово, но не разграничить символы, которые отделяют слово, например, от других слов. \b
Цифровой символ соответствует всем числовым символам от 0 до 9. Вы можете использовать его, чтобы соответствовать целым числам с произвольным количеством цифр: Regex ‘\ D +’ соответствует целым номерам ’10’, ‘1000’, ‘942’ и ‘99999999999 ‘. \d
Соответствует любому незначному характеру. Это обратный \ d и это эквивалентно [^ 0-9]. \D

Но это не все персонажи, которые вы можете использовать в регулярном выражении.

Есть также Мета персонажи Для двигателя REGEX, который позволяет вам делать гораздо более мощные вещи.

Хорошим примером является оператор Звездочки, который соответствует «нулю или более» вхождениям предыдущего регулятора. Например, шаблон . * TXT соответствует произвольному количеству произвольных персонажей, сопровождаемых суффиксом 'txt' Отказ Этот шаблон имеет два специальных мета-персонажа Regex: точка Отказ и оператор звездочки * Отказ Теперь вы узнаете о этих мета-персонажах:

Regex Meta персонажи

Не стесняйтесь посмотреть короткое видео о самых важных символах Meta Regex:

Далее вы получите быстрый и грязный обзор наиболее важных операций REGEX и как их использовать в Python.

Вот самые важные операторы Regex:

Оператор Wide-Card (DOT) соответствует любому символу в строке, за исключением символа Newline ‘\ N’. Например, Regex ‘…’ соответствует всем словам с тремя символами, такими как «abc», «Cat» и «собака». .
Оператор Asterisk ноль или больше соответствует произвольному количеству вхождений (включая нулевые вхождения) непосредственно предшествующего Regex. Например, Regex ‘Cat *’ соответствует строкам «CA», «CAT», «CATT», «CATTT» и «CATTTTTTT». *
Оператор нуля или один оператор (как следует наименование) либо ноль, либо одно вхождению непосредственно предшествующего Regex. Например, кот Regex? Соответствует обеим струнам «Ca» и «CAT» – но не «CATT», «CATTT» и «CATTTTTTT». ?
Оператор AT-MIZEL-ONE соответствует одному или нескольким вхождению непосредственно предшествующего регезе. Например, «CAT +» REGEX не соответствует строке «CA», а соответствует всем строкам, по меньшей мере, одним трейлинговым символом «T», таких как «кошка», «CATT» и «CATTT». +
Оператор Start-string соответствует началу строки. Например, Regex ‘^ p’ будет соответствовать строкам «Python» и «программирование», но не «Lisp» и «шпионить», где символ «p» не происходит в начале строки. ^
Оператор конца строки соответствует концу строки. Например, Regex ‘Py $’ будет соответствовать строкам «Main.py» и «Pypy», но не строки «Python» и «pypi». $
ИЛИ Оператор соответствует либо Regex A или Regeex B. Обратите внимание, что интуиция сильно отличается от стандартной интерпретации или оператора, который также может удовлетворить оба условия. Например, Regex ‘(Hello) | (HI) «Соответствует строки« Hello World »и« Привет Python ». Было бы не иметь смысла попытаться сопоставить их обоих одновременно. A | B.
Оператор и оператор сначала совпадает с Regex A и вторым Regex B, в этой последовательности. Мы уже видели его тривиально в Regex ‘Ca’, которое соответствует первым Regex ‘C’ и Second Regex ‘A’. Аб

Обратите внимание, что я дал вышеупомянутые операторы некоторых более значимых имен (жирным шрифтом), чтобы вы могли немедленно понять цель каждого Regex. Например, '^' Оператор обычно обозначается как оператор «Caret». Эти имена не описаны, поэтому я придумал более детские самые слов, такие как оператор «Start of String».

Давайте погрузимся в несколько примеров!

Примеры

import re

text = '''
    Ha! let me see her: out, alas! he's cold:
    Her blood is settled, and her joints are stiff;
    Life and these lips have long been separated:
    Death lies on her like an untimely frost
    Upon the sweetest flower of all the field.
'''

print(re.findall('.a!', text))
'''
Finds all occurrences of an arbitrary character that is
followed by the character sequence 'a!'.
['Ha!']
'''

print(re.findall('is.*and', text))
'''
Finds all occurrences of the word 'is',
followed by an arbitrary number of characters
and the word 'and'.
['is settled, and']
'''

print(re.findall('her:?', text))
'''
Finds all occurrences of the word 'her',
followed by zero or one occurrences of the colon ':'.
['her:', 'her', 'her']
'''

print(re.findall('her:+', text))
'''
Finds all occurrences of the word 'her',
followed by one or more occurrences of the colon ':'.
['her:']
'''


print(re.findall('^Ha.*', text))
'''
Finds all occurrences where the string starts with
the character sequence 'Ha', followed by an arbitrary
number of characters except for the new-line character. 
Can you figure out why Python doesn't find any?
[]
'''

print(re.findall('\n$', text))
'''
Finds all occurrences where the new-line character '\n'
occurs at the end of the string.
['\n']
'''

print(re.findall('(Life|Death)', text))
'''
Finds all occurrences of either the word 'Life' or the
word 'Death'.
['Life', 'Death']
'''

В этих примерах вы уже видели специальный символ \ N который обозначает нового стилевого символа в Python (и большинство других языках). Есть много специальных символов, специально предназначенных для регулярных выражений.

Какие специальные персонажи Python Regeex должны быть сбежены?

Краткий ответ : Вот исчерпывающий список всех специальных символов, которые необходимо избежать:

.      ---->     \.
*      ---->     \*
?      ---->     \?
+      ---->     \+
^      ---->     \^
$      ---->     \$
|      ---->     \|

Вопрос:|: Существует ли полный список каких специальных символов, чтобы убежать, чтобы удалить особое значение в Regex?

Пример : Скажем, вы ищете эти символы в данной строке, и вы задаетесь вопросом, что из них вы должны убежать:

|^&+-%*/=!>

Ответ : Различить использование специальных символов внутри или снаружи Класс персонажей Отказ

  • В классе персонажа вам нужно избежать только минус символ, заменяющий [-] с [\ -] Поскольку это имеет особое значение в классе персонажа (символ «диапазона»).
  • За пределами класса символов в обычном рисунке Regex вам нужно избежать только Regex Chars со специальным значением. Вот исчерпывающий список всех специальных символов, которые необходимо сбежать: . *? + ^ $ |
import re

text = '|^&+-%*/=!>'

# WITHIN CHARACTER CLASS --> ESCAPE '-'
print(re.findall('[|^&+\-%*/=!>]', text))
# ['|', '^', '&', '+', '-', '%', '*', '/', '=', '!', '>']

# WITHOUT CHARACTER CLASS --> ESCAPE ALL SPECIAL CHARS '.*?+^$|'
pattern = '|^&+$-%*/=!>'
print(re.findall('\|', text))
print(re.findall('\^', text))
print(re.findall('\$', text))
print(re.findall('\+', text))
print(re.findall('-', text))
print(re.findall('%', text))
print(re.findall('\*', text))
print(re.findall('/', text))
print(re.findall('=', text))
print(re.findall('!', text))
'''
['|']
['^']
['$']
['+']
['-']
['%']
['*']
['/']
['=']
['!']
'''

Сбежав на специальные символы Regex, они теряют свое особое значение, и вы можете найти символы в исходном тексте.

Куда пойти отсюда

Вы узнали все специальные символы регулярных выражений, а также мета символов. Это даст вам сильную основу для улучшения ваших навыков Regex.

Если вы хотите ускорить свои навыки, вам нужен хороший фонд. Проверьте мою совершенно новую книгу Python « Python One-listers (Amazon Link) « Что повышает ваши навыки с нуля до героя в одной строке Python Code!

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

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

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