Регулярные выражения (Regular Expressions) в Python представляют собой универсальный инструмент для работы с текстовыми данными. Они позволяют осуществлять поиск, извлечение и замену текста на основе шаблонов. Вот основные концепции и синтаксис регулярных выражений в Python:
Специальные символы
Символы в " " | Значение |
. | Любой символ, кроме символа новой строки (\n). |
^ | Начало строки. |
$ | Конец строки. |
* | Ноль или более повторений предыдущего символа. |
+ | Одно или более повторений предыдущего символа. |
? | Ноль или одно повторение предыдущего символа. |
{n} | Ровно n повторений предыдущего символа. |
{n,} | Не менее n повторений предыдущего символа. |
{n,m} | От n до m повторений предыдущего символа. |
\ | Экранирование специальных символов. |
[] | Набор символов. |
| | Или. |
Специальные последовательности
Обозначение в ' ' | Значение |
\d | Цифра (0-9). |
\D | Не цифра. |
\w | Буквенно-цифровой символ (a-z, A-Z, 0-9, _). |
\W | Не буквенно-цифровой символ. |
\s | Пробельный символ (пробел, табуляция, новая строка). |
\S | Не пробельный символ. |
Группировка, обратные ссылки и модификаторы
Обозначение | Значение символов |
'()' | Группировка символов. |
`\1`, `\2`, ... | Обратные ссылки на группы. |
`re.IGNORECASE` или `re.I` | Игнорировать регистр при сопоставлении. |
`re.MULTILINE` или `re.M` | Разрешить "^" и "$" сопоставлять начало и конец каждой строки. |
Методы модуля `re`
Метод | Значение метода |
re.compile(pattern) | Компилирует регулярное выражение в объект `Pattern`. |
re.search(pattern, string) | Ищет первое сопоставление регулярного выражения в строке. |
re.match(pattern, string) | Ищет сопоставление регулярного выражения в начале строки. |
re.findall(pattern, string) | Находит все сопоставления регулярного выражения в строке и возвращает их в виде списка. |
re.finditer(pattern, string) | Находит все сопоставления регулярного выражения в строке и возвращает их в виде итератора объектов `Match`. |
re.sub(pattern, repl, string) | Заменяет все сопоставления регулярного выражения в строке на указанную подстановку. |
import re
# Поиск всех цифр в строке
pattern = r'\d+'
text = 'There are 123 apples and 456 oranges'
matches = re.findall(pattern, text)
print(matches) # Вывод: ['123', '456']
# Замена всех цифр на 'X'
new_text = re.sub(pattern, 'X', text)
print(new_text) # Вывод: 'There are X apples and X oranges'
# Поиск всех слов, начинающихся с буквы 'a' или 'b'
pattern = r'\b[a-b]\w+'
text = 'apple banana carrot dog elephant'
matches = re.findall(pattern, text)
print(matches) # Вывод: ['apple', 'banana']
Регулярные выражения могут быть очень мощным инструментом для работы с текстом, но их следует использовать с осторожностью, так как сложные шаблоны могут быть трудными для понимания и поддержки.
Вот примеры использования и описание основных методов модуля `re` для работы с регулярными выражениями:
1. re.compile(pattern, flags=0):
Компилирует регулярное выражение в объект `Pattern`.
import re
pattern = re.compile(r'\d+') # Компилируем регулярное выражение для поиска чисел
2. re.search(pattern, string, flags=0):
Ищет первое сопоставление регулярного выражения в строке.
import re
text = 'There are 123 apples and 456 oranges'
match = re.search(r'\d+', text) # Ищем первое число в строке
if match:
print(match.group()) # Вывод: 123
3. re.match(pattern, string, flags=0):
Ищет сопоставление регулярного выражения в начале строки.
import re
text = '123 apples and 456 oranges'
match = re.match(r'\d+', text) # Ищем число в начале строки
if match:
print(match.group()) # Вывод: 123
4. re.findall(pattern, string, flags=0):
Находит все сопоставления регулярного выражения в строке и возвращает их в виде списка.
import re
text = 'There are 123 apples and 456 oranges'
matches = re.findall(r'\d+', text) # Находим все числа в строке
print(matches) # Вывод: ['123', '456']
5. re.finditer(pattern, string, flags=0):
Находит все сопоставления регулярного выражения в строке и возвращает их в виде итератора объектов `Match`.
import re
text = 'There are 123 apples and 456 oranges'
matches = re.finditer(r'\d+', text) # Находим все числа в строке
for match in matches:
print(match.group()) # Вывод: 123, затем 456
6. re.sub(pattern, repl, string, count=0, flags=0):
Заменяет все сопоставления регулярного выражения в строке на указанную подстановку.
import re
text = 'There are 123 apples and 456 oranges'
new_text = re.sub(r'\d+', 'X', text) # Заменяем все числа на 'X'
print(new_text) # Вывод: 'There are X apples and X oranges'