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

Работа с выражениями режима в Python

Я пишу контент для AWS, Kubernetes, Python, JavaScript и многое другое. Чтобы просмотреть весь последний контент, будь … Tagged с начинающими, Python, 100daysofpython.

Я пишу контент для AWS, Kubernetes, Python, JavaScript и многое другое. Чтобы просмотреть весь последний контент, обязательно Посетите мой блог и подписаться на мою рассылку. Подпишись на меня в Твиттере .

Это день 14 #100daysOfpython Challenge

Этот пост будет использовать Регулярные выражения модуль от стандартной библиотеки до …

Предварительные условия

  1. Знакомство с Пипенв . Смотрите Здесь за мой пост на Pipenv.
  2. Знакомство с Jupyterlab Анкет Смотрите Здесь Для моего поста на Jupyterlab.
  3. Знакомство с Обычные выражения

Начиная

Давайте создадим Hello-Python-Regex каталог и установить подушку.

# Make the `hello-python-regex` directory
$ mkdir hello-python-regex
$ cd hello-python-regex
# Create a folder to place your icons
$ mkdir icons

# Init the virtual environment
$ pipenv --three
$ pipenv install --dev jupyterlab

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

# Startup the notebook server
$ pipenv run jupyter-lab
# ... Server is now running on http://localhost:8888/lab

Сервер теперь будет запущен и работает.

Создание ноутбука

Однажды на http://localhost: 8888/lab , выберите, чтобы создать новую ноутбук Python 3 из запуска.

Убедитесь, что этот ноутбук сохранен в Hello-Python-Regex/Docs/regex.ipynb Анкет

Мы рассмотрим следующее в каждой ячейке блокнота:

  1. Импорт модуля регуляции.
  2. Основное использование модуля коррекса.
  3. Замена строки с помощью модуля Regex.

Импорт модуля

Это импортирует Модуль режима из стандартной библиотеки.

import re

m = re.search("Hello, (.+)", "Hello, world!")
m.group(1)
# 'world!'

Основное использование модуля

Есть ряд полезных методов модуля, которые мы можем использовать, которые мы продемонстрируем:

  1. Поиск струн.
  2. Соответствующие струны.
  3. Использование без компиляции.
  4. Разделение строки на список.
  5. Замена матчей.

Поиск струн

Сканируйте строку в поисках первого местоположения, где это регулярное выражение создает совпадение, и возвращает соответствующий объект совпадения. Вернуть нет, если никакая позиция в строке соответствует шаблону; Обратите внимание, что это отличается от поиска совпадения нулевой длины в какой-то момент в строке.

import re

pattern = re.compile("ello, (.+)")
m = pattern.search("Hello, world!")
m.group(1)
print(m) # 
print(m.group(1)) # world!

n = pattern.search("Hello, world!", 0)
print(n) # 
print(n.group(1)) # world!

Соответствующие струны

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

pattern = re.compile("ello, (.+)")
m = pattern.match("Hello, world!")
# No match as "e" is the 2nd character the "Hello, world!".
print(m) # None

pattern = re.compile("Hello, (.+)")
# Does match
n = pattern.match("Hello, world!")
print(n) # 

Использование без компиляции

Когда вы используете re.match и re.search В качестве статического метода вы можете передать корпорацию в качестве первого аргумента:

m = re.match("Hello, (.+)", "Hello, world!")
print(m) # 

n = re.match("Hello, (.+)", "Hello, world!")
print(n) # 

Разделение строки на список

m = re.split(",", "Hello, world!")

print(m) # ['Hello', ' world!']

n = re.split("\s", "Hello beautiful world!")

print(n) # ['Hello', 'beautiful', 'world!']

Замена матчей

Мы можем использовать Поиск и sub Методы замены совпадений.

# Simple example
target = "Photo credit by [@thomas](https://site.com/@thomas)"
m = re.search(r"Photo credit by \[@(.+)\]\(https://site.com/@(.+)\)", target)
res = re.sub(m.group(1), "dennis", target)
print(res) # Photo credit by [@dennis](https://site.com/@dennis)

# By iterating for multiple matches
target = "Photo credit by [@thomas](https://site.com/@user)"
m = re.search(r"Photo credit by \[@(.+)\]\(https://site.com/@(.+)\)", target)
res = target

for idx, val in enumerate(m.groups()):
        res = re.sub(val, "dennis", res)

print(res) # Photo credit by [@dennis](https://site.com/@dennis)

Для более конкретной замены (особенно в большом наборе текста) мы можем быть более явными со строкой для замены:

target = """
Other words thomas and user we don't want to replace.
Photo credit by [@thomas](https://site.com/@user)
"""
new_name = "dennis"

pattern = re.compile(r"Photo credit by \[@(.+)\]\(https://site.com/@(.+)\)")
res = pattern.sub(f"Photo credit by [@{new_name}](https://site.com/@{new_name})", target)
# Other words thomas and user we don't want to replace.
# Photo credit by [@dennis](https://site.com/@dennis)

Резюме

Сегодняшний пост продемонстрировал, как использовать Re Модуль из стандартной библиотеки для поиска, сопоставления, разделения и замены текста в струнах Python.

Это может быть невероятно полезно при работе с текстовыми файлами.

Ресурсы и дальнейшее чтение

  1. ABCS Pipenv
  2. Привет, jupyterlab
  3. Пипенв
  4. Регулярные выражения в Python
  5. Информация о регулярных выражениях
  6. Regex 101 – Веб -сайт для тестирования выражений Regex

Кредит фото: pawel_czerwinski

Первоначально опубликовано на моем блог . Чтобы увидеть новые сообщения без промедления, прочитайте сообщения там и подпишитесь на мою рассылку.

Оригинал: “https://dev.to/okeeffed/working-with-regex-expressions-in-python-48m0”