Автор оригинала: David Yeoman.
Быстрое введение в модуль Python ‘Re’
«Как извлечь цифры или цифры из строки» Обычный поиск пользователей Python в Google, и частый запрос на форумах, таких как переполнение стека. Ответы неизменно разговаривают с двумя основными решениями и в этой статье я намереваюсь сосредоточиться на одном из тех, кто называется Регулярные выражения Отказ
Регулярные выражения не получают сласцы, они должны давать как их власть, так и широко распространенное использование во многих современных популярных языках программирования. Серьезные программисты, работающие на одних количества самых больших имен в информатике, сегодня часто полагаются на регулярные выражения для очистки и извлечения данных для использования. Если вы ищете преимущество, чтобы турборечить свои способности кодирования, я бы передал регулярные выражения второго взгляда.
Вы увидите регулярные выражения, упомянутые некоторыми псевдонимами, либо RES, REGEXES или REGEX. Это может быть умеренно запутанным новичкам, поскольку Regex также является именем третьего пульта, который мы кратко коснулись в этой статье. На данный момент, когда я говорю о регулярных выражениях, я имею в виду небольшое, мощное и очень специализированное подмножество языка, которое отправляется в стандартное стандартное с Python и просто называется « Re ‘.
Так где бы вы использовали регулярные выражения?
Когда у вас есть свалка необработанных данных, вы обычно находите себя, нуждающимся в том, чтобы очистить эти данные, прежде чем он станет полезным, или вам может потребоваться извлечь или «мой» используемый компонент из массы данных, прежде чем отбрасывать остальные. Возможно, вам нужно проверить или извлекать адрес электронной почты или номер телефона из текстовой строки? Может быть, вы просто прогнозировали веб-страницу и должны отделить очень конкретные ссылки или модели текста и цифр?
Регулярные выражения регулярно используются в биологии при поиске шаблонов в ДНК или белковых последовательностях. Аналогично в поисках географических координат или таксономических названий в научных документах. Нет никаких сомнений в том, что очень рано в каком-либо разработке какого-либо программиста проблема возникает, что регулярные выражения лучше всего размещены, поэтому я предлагаю вам добавить его в свой список инструментов.
Прежде чем мы начнем использовать модуль RE, я хочу прикоснуться к компиляции. Стандартные учебники будут научить необходимость «компилировать» шаблон перед использованием его для поиска строки. Однако многие функции в RE Module позволит вам скомпилировать шаблон «на лету», когда код выполнен. Это твой выбор, но (почти так же, как мы определяем функции, чтобы оптимизировать наш код), если вы намерены использовать шаблон несколько раз через вашу программу, кажутся больше эффективной памяти, чтобы скомпилировать шаблон один раз и иметь Cheath Cache Python Узор для будущего использования, который отрицает необходимость компиляции, каждый раз, когда он вызывается. Поэтому я буду использовать шаг компиляции через мои примеры кода.
Персонажи регулярного выражения
Существует два главных героя, используемые в регулярных выражениях; обычный и особенный. Обычные символы – это те, которые представляют собой, поэтому, если вы хотите найти слово, такое как «Finxter», то это становится шаблоном поиска, который вы бы использовали. Однако часто вы не знаете точные буквы или цифры, которые вы ищете, только шаблон, что эти цифры делают и то есть когда мы используем специальные символы.
Module Re использует тип сокращенного типа, чтобы позволить вам искать определенные символы и шаблоны в ваших данных. Есть несколько для изучения, но следующее заставит нас начать с нашей цели поиска и извлечения чисел из строки.
- \ D Матчи с десятичной цифрой, поэтому выбирает любое число от 0 до 9 включительно.
- \ D будет соответствовать любому персонажу, который не является десятичной цифрой. Тем самым исключая 0 по 9.
- \ W Соответствует любому буквенно-цифровому символу, поэтому цифры или буквы, включая символ подчеркивания.
- \ W . будет соответствовать любому не буквенно-цифровому символу, поэтому он исключает номера, буквы или подчеркивания.
- \ S Соответствует символам «белого пространства», поэтому пространство, вкладка или новенький символ.
- \ S будет соответствовать любому символу, который не является пространством, вкладкой или новым символом
Используйте Prefix Raw String при создании шаблона
Перед тем, как мы попробуем некоторые из этих специальных персонажей, я хочу кратко прикоснуться к использованию обратных стяков в регулярных выражениях. Как вы узнаете, Python использует обратные черновики в специальных последовательностях символов, таких как «\ N», чтобы указать новую строку, или «\ T», чтобы указать вкладку. Вершинные косания также используются для «побега» других специальных символов. Например, если я хочу избежать обратной ячейки, потому что я имею в виду, как это показать как фактическую обратную косание в строке, а не команду в коде, я бы использовал другую обратную чертую черта, как в '\\'
Отказ Поэтому использование обратных стяков в модуле RE имеет возможность спутать. Вместо того, чтобы завязать себя в узлах, пытаясь решить, что сбежать, я предлагаю использовать префикс «R» к регулярному выражению, которое вы создаете, что указывает «сырую строку» или, который игнорирует escape. Вы увидите это в ближайшее время, когда мы с кодировали поиск.
Импорт и использование регулярного модуля экспрессии
Итак, давайте будем использовать специальные символы обычного выражения для поиска строки и посмотреть, как они работают. Но сначала нам нужно импортировать регулярные модуль экспрессии в наш код. Просто добавьте следующее в свой скрипт.
Для этой демонстрации я собираюсь использовать электронное письмо, которое я получил от Майера Криса, когда я присоединился к своей академии Finxter в день. Мы создадим некоторые шаблоны и посмотрим, сможем извлечь некоторые численные и другие данные из строки. На момент моего присоединения Академия Финктер была почти 32 000 членов. Давайте посмотрим, сможем извлечь фактическое количество людей в сообществе Finxter, используя ранее, обсуждаемые персонажи \ d и \ d, обсуждаемые ранее.
Из этого примера есть две вещи, которые следует отметить, первое – это использование «R» перед рисунком, которую мы составили (R ‘\ d \ d \ d \ d \ d \ d’) что обозначает сырую строку, как мы обсуждали ранее. Второй в том, что поиск () вернул объект Match, содержащий информацию о поиске. Обратите внимание на свойство «SPIN» объект Match Object, который дает нам полезные данные, такие как индекс запуска и остановки нахождения шаблона (190, 196) В строке и свойстве «Match», который показывает возвращенный шаблон Match (Match = ’31, 197 ‘) Отказ Чтобы извлечь только данные, которые мы желаем по поиску, нам нужно использовать команду group () следующим образом:
Который возвращает данные, которые мы искали. Помните, что эти данные все еще являются строкой и потребуют уборки и преобразования, если вы хотите использовать его в уравнении.
Специальные символы
Нам удалось результат с этим шаблоном, но если у вас было большее количество, такое как использованное с кредитными картами, что уровень повторения будет быстро утомительно, поэтому существует более короткий метод выражения шаблона, используя специальные символы, которые означают повторение символов вокруг Их, так что давайте посмотрим на тех.
- + сигналы, которые поиск должен включать 1 или более повторений предыдущего характера; Таким образом, узор из 34+ вернутся 34, 344, 3444 и т. Д. Это не вернется всего 3, должно быть не менее одного 4.
- * Указывает, что поиск должен вернуть 0 или более повторений предыдущего характера; Таким образом, та же картина 34 * вернет 3, 34, 344, 3444 и т. Д.
- ? просит поиск вернуть 0 или 1 повторение предыдущего характера; Так 34? вернется только 3 или 34.
- Отказ (Точка или период) подпитываются для любого персонажа, кроме новой строки.
- |. используется как индикатор ‘или’. Если вы используете шаблон X | Y, он будет искать X или Y.
Таким образом, использование некоторых из этих дополнительных персонажей наш предыдущий шаблон может быть сокращен следующим образом.
Просто остерегайтесь точка, когда мы использовали его в этом примере; Поскольку он может стоять для любого персонажа, он может вернуть номер, а не запятую, которую мы ищем, и поэтому шаблон может быть слишком широким. Чтобы быть конкретным, вы можете использовать \ W или \ D в месте точки.
Определите свой собственный класс персонажа
Иногда вы можете найти обычные и специальные персонажи слишком широки для шаблона, которую вы хотите найти, и в этих случаях модуль RE позволяет нам определить специальный класс символов. Это делается с помощью квадратной нотации кронштейна.
[] Используются для предусматривания конкретной группировки символов, которые вы ищете.
Возможно, мы хотим извлечь адрес электронной почты из строки электронной почты выше?
Первый квадратный рисунок кронштейна требует любых буквенно-цифровых символов, включая символ подчеркивания, за которым следует символ @ @, а затем второй квадратный кронштейн снова вызывает призывы любых буквенно-цифровых символов, включая символ подчеркивания.
Итак, как мы используем регулярные выражения для извлечения адреса из вышеуказанной строки? Ну, мы знаем, что немецкая адресная конвенция – [Улица] [номер], [почтовый индекс] [Город] Итак, давайте посмотрим, как мы можем сменить это.
Мы хотим предусматривать, что первое слово улицы должно быть заглавным, в противном случае мы можем вытащить другие шаблоны сопоставления из строки, поэтому давайте будем использовать [AZ] [AZ] +, чтобы начать наш шаблон, который указывает, что вы выбрали только одну букву капитала от A до Z, чтобы начать шаблон, за которым следует один или несколько строчных букв от A до z.
Мы следим за этим шаблоном с персонажем White-Space ‘\ S’.
Для номера улиц мы призываем к десятичным числам от 0 до 9, и данные номера улиц могут быть большими или небольшими кронштейнами, в целом, предусматривающем поиск любого количества цифр от 2 до 4 [\ d {2,4}].
Затем мы ищем почтовый индекс, вспоминая запятую и белосокое пространство, которое предшествует количеству цифр [, \ S \ d] +
Наконец, мы называем белосброс и один или несколько буквенно-цифровых символов, которые будут представлять город [\ S \ W] +.
Так что последний шаблон будет выглядеть так [A-Z] [A-Z] + \ S [\ d {2,4}] [, \ s \ d] + [\ s \ w] +
Давай попробуем.
Успех! В начале этой статьи мы отправились к извлечению цифр из строки, и мы не только удалили это, но мы также взяли адрес электронной почты и адрес уличного адреса. Однако не останавливайте там, как мы только слегка поцарапали поверхность того, какие регулярные выражения могут сделать. Мы использовали компиляцию (), поиск (), совпадать () и группу (), но есть еще много модулей, которые вы можете использовать. Вот некоторые из наиболее часто используемых.
- Re.comPile (Pattern) создает объект регулярных выражений, которые кэширует для нескольких использований.
- Re.Search (Pattern, Strattion) проверяет, находится ли шаблон в строке и возвращает первый матч в качестве объекта совпадения, который, как мы видели, содержит мета-данные о соответствующей позиции и подконе.
- Re.findall (шаблон, строка) проверяет, находится ли шаблон в строке и возвращает список всех совпадений.
- Re.match (шаблон, строка) проверяет шаблон в начале строки и возвращает объект совпадения.
- Re.Split (шаблон, строка) разделяет строку, в которой шаблон соответствует и возвращает список строк. Например, вы можете разделить текстовую строку на каждом полноценном (период), а затем белое пространство и иметь список отдельных строк.
- re.sub (шаблон, замена, строка) находит первый шаблон соответствует и заменяет его с помощью строки замены перед возвратом новой строки.
Всесторонний учебник на тонкостях регулярных выражений можно найти здесь https://blog.finxter.com/python-regex/
Наконец, я ранее упомянул REGEX, который при использовании в качестве сокращения для регулярных выражений также является сторонним модулем, который использует API, совместимый со стандартным модулем Python RE, но добавляет повышенную функциональность. Если вы хотите исследовать Regex, вы можете найти его здесь
В итоге
Чтобы обобщить, сегодняшняя задача состояла в том, чтобы извлечь цифры из строки. Мы узнали о Python Re Модуль, который позволяет нам использовать мощные регулярные выражения для создания шаблона символов, которые мы хотим извлечь из строки. Мы узнали некоторые стандартные и специальные символы, которые позволяют нам создавать некоторые настроенные шаблоны, и мы изучили несколько распространенных команд, которые примут наш шаблон и возвращает местоположение, совпадение и строку, которую мы ищем.
Существует значительная сумма, чтобы узнать о регулярных выражениях, и я доверяю, эта статья выпустила ваше желание более глубокого понимания. Спасибо за чтение.