Python

Регулярные выражения с использованием Python 3

Регулярные выражения с использованием Python 3
Регулярные выражения часто рассматриваются как действительно непонятные серии иероглифов, которые обычно копируются из Интернета и вставляются в свой код. Затем это загадочное заклинание демонстрирует магические возможности поиска закономерностей внутри строк текста, и если мы его вежливо попросим, ​​оно даже окажет нам услугу, заменив данный узор в строке чем-то более приятным.

Например, когда вы пишете обработчики для URL (и Бог поможет вам, если вы пишете его с нуля), вы часто хотите отображать тот же результат независимо от завершающего '/' в URL-адресе. E.g https: // пример.com / user / settings / и https: // пример.com / user / settings должны указывать на одну и ту же страницу, несмотря на завершающий символ '/'. 

Однако вы не можете игнорировать все косые черты, например:

  1. Косая черта между «пользователем» и «настройки», e, «пользователь / настройки».
  2. Также вам нужно будет принять во внимание «//» в начале вашего FQDN, за которым следует «https».

Итак, вы придумали такое правило: «Игнорировать только косые черты, за которыми следует пустой пробел.»И при желании вы можете закодировать это правило с помощью ряда операторов if-else. Но это довольно быстро станет громоздким. Вы можете написать функцию cleanUrl (), которая может инкапсулировать это за вас. Но вселенная скоро начнет бросать в вас больше шаров. Скоро вы обнаружите, что пишете функции для cleanHeaders (), processLog () и т. Д. Или вы можете использовать регулярное выражение всякий раз, когда требуется какое-либо сопоставление с образцом.

Стандартный ввод-вывод и файлы

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

  1. Текст обрабатывается как (один) поток символов.
  2. Этот поток может исходить из файла текста Unicode или ASCII, или из стандартного ввода (клавиатуры), или из удаленного сетевого подключения. После обработки, скажем, скриптом регулярных выражений, вывод поступает либо в файл, либо в сетевой поток, либо на стандартный вывод (e.г, консоль)
  3. Поток состоит из одной или нескольких строк. Каждая строка содержит ноль или более символов, за которыми следует новая строка.

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

Регулярные выражения и строка

Регулярное выражение не имеет ничего общего с файлами. Представьте его как черный ящик, который может принимать в качестве входных данных любую произвольную строку любой (конечной) длины, и когда он достигает конца этой строки, он может:

  1. Примите строку. Другими словами, строка Спички регулярное выражение (регулярное выражение).
  2. Отклонить строку, я.е, строка не матч регулярное выражение (регулярное выражение).

Несмотря на то, что он похож на черный ящик, я добавлю еще несколько ограничений к этому механизму. Регулярное выражение читает строку последовательно, слева направо, и он читает только один символ за раз. Итак, строка «LinuxHint» можно читать как:

'L "i" n "u" x "H" i "n" t' [слева направо]

Начнем с простого

Самый упрощенный тип регулярного выражения - это поиск и сопоставление строки 'C'. Регулярное выражение для него - просто "C". Довольно тривиально. Чтобы сделать это в Python, вам потребуется сначала импортировать повторно модуль для регулярных выражений.

>>> импорт ре

Затем мы используем функцию re.поиск(узор, строка) где шаблон это наше регулярное выражение и нить во входной строке, в которой мы ищем шаблон.

>>> повторно.search ('C', 'В этом предложении есть намеренная C')

Функция берет образец 'C', ищет его во входной строке и печатает местоположение (span) где указанная закономерность найдена. Эта часть строки, эта подстрока - это то, что соответствует нашему регулярному выражению. Если бы такое совпадение не было найдено, вывод будет Никто объект.

Точно так же вы можете искать шаблон «регулярное выражение» следующим образом:

>>> повторно.search («регулярное выражение», «Мы можем использовать регулярные выражения для поиска шаблонов.”)

повторно.поиск (), повторно.match () и повторно.полное совпадение()

Три полезные функции из модуля re включают:

1.  повторно.поиск(узор, строка)

Это возвращает подстроку, соответствующую шаблону, как мы видели выше. Если совпадений не найдено, то Никто возвращается. Если несколько подстрок соответствуют заданному шаблону, сообщается только о первом возникновении.

2.  повторно.матч(узор, строка)

Эта функция пытается сопоставить предоставленный шаблон с начала строки. Если где-то на полпути встречается разрыв, он возвращается Никто.

Например,

>>> повторно.матч («Джо», «Джон Доу»)

Где, поскольку строка «Меня зовут Джон Доу» не совпадает, и, следовательно, Никто возвращается.

>>> print (re.match («Джо», «Меня зовут Джон Доу»))
Никто

3.  повторно.полное совпадение(узор, строка)

Это строже, чем оба приведенных выше, и пытается найти точное совпадение с шаблоном в строке, иначе по умолчанию Никто.

>>> print (re.fullmatch («Джо», «Джо»))

# Все остальное не будет совпадать

Я буду использовать только повторно.поиск() функция в остальной части этой статьи. Всякий раз, когда я говорю, что регулярное выражение принимает эту строку, это означает, что athe повторно.поиск() функция нашла подходящую подстроку во входной строке и вернула ее вместо Никтообъект.

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

Регулярные выражения, такие как 'John' и 'C', бесполезны. Нам нужны специальные символы, которые имеют конкретное значение в контексте регулярных выражений. Вот несколько примеров:

    1. ^ - соответствует началу строки. Например, '^ C' будет соответствовать всем строкам, начинающимся с буквы C.
    2. $ - соответствует концу строки.
    3. . - Точка указывает на один или несколько символов, кроме символа новой строки.
    4. * - это ноль или более символов того, что ему предшествовало. Итак, b * соответствует 0 или более вхождений b. ab * соответствует только a, ab и a
    5. + - Это один или несколько символов того, что ему предшествовало. Таким образом, b + соответствует 1 или нескольким вхождениям b. ab * соответствует только a, ab и a
    6. \ - обратная косая черта используется как escape-последовательность в регулярных выражениях. Итак, вы хотите, чтобы регулярное выражение искало буквальное присутствие символа доллара '$' вместо конца строки. Вы можете написать \ $ в регулярном выражении.
    7. Фигурные скобки можно использовать для указания количества повторений, которое вы хотите видеть. Например, такой шаблон, как ab 10, означает, что строка a, за которой следует 10 b, будет соответствовать этому шаблону. Вы также можете указать диапазон чисел, например, b 4,6 соответствует строкам, содержащим b, повторяющиеся от 4 до 6 раз подряд. Шаблон для 4 или более повторений потребует только конечную запятую, например, b 4,
    8. Квадратные скобки и диапазон символов. RE, например [0-9], может действовать как заполнитель для любой цифры от 0 до 9. Точно так же вы можете иметь цифры от одного до пяти [1-5] или для соответствия любой заглавной букве использовать [A-Z] или для любой буквы алфавита, независимо от того, является ли она заглавной или строчной, используйте [A-z].
      Например, любая строка, состоящая ровно из десяти цифр, соответствует регулярному выражению [0-9] 10, что весьма полезно, когда вы ищете номера телефонов в заданной строке.
    9. Вы можете создать оператор типа ИЛИ, используя | символ, в котором регулярное выражение состоит из двух или более регулярных выражений, скажем, A и B. Регулярное выражение A | B является совпадением, если входная строка совпадает либо с регулярным выражением A, либо с B.
    10. Вы можете группировать разные регулярные выражения вместе. Например, регулярное выражение (A | B) C будет соответствовать регулярным выражениям для AC и

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

Практический опыт и рекомендации

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

Чтобы узнать больше о теоретическом аспекте регулярных выражений, вы можете взглянуть на первую пару глав книги «Введение в теорию вычислений» Майкла Сипсера. Его очень легко понять, и он показывает важность регулярных выражений как ключевой концепции вычислений!

WinMouse позволяет настраивать и улучшать движение указателя мыши на ПК с Windows
Если вы хотите улучшить функции указателя мыши по умолчанию, используйте бесплатное ПО WinMouse. Он добавляет дополнительные функции, которые помогут ...
Левая кнопка мыши не работает в Windows 10
Если вы используете выделенную мышь со своим ноутбуком или настольным компьютером, но левая кнопка мыши не работает в Windows 10/8/7 по какой-то причи...
Курсор прыгает или перемещается случайным образом при наборе текста в Windows 10
Если вы обнаружите, что ваш курсор мыши прыгает или перемещается сам по себе, автоматически, случайным образом при вводе текста на ноутбуке или компью...