my text
"my text"
'.'
- любой символ¶Выражение: "m. text"
Подходящие строки: "my text", "me text", "mm text" - ок
'?'
- 0 или 1 вхождение предыдущего символа¶Выражение: lks?h
Подходящие строки: "lksh", "lkh"
'*'
- 0 или больше вхождений предыдущего символа¶Выражение: "lks*h"
Подходящие строки: "lkh", "lksh", "lkh", "lkssh", "lkssssssh", ...
'+'
- 1 или больше вхождений предыдущего символа¶Выражение: "lks*h"
Подходящие строки: "lksh", "lkh", "lkssh", "lkssssssh", ...
'{x}'
- ровно x
повторений предыдущего символа¶Выражение: "lks{4}h"
Подходящие строки: "lkssssh"
'{x,y}'
- от x
до y
повторений предыдущего символа¶Выражение: "lks{4,6}h"
Подходящие строки: "lkssssh", "lksssssh", "lkssssssh"
'[]'
- любой символ из заданных¶Выражение: "f[iauo]sh"
Подходящие строки: "fish", "fash", "fush", "fosh"
Выражение: "[a-z]"
Подходящие строки: "a", "b", "c", ...
Выражение: [-az]
Подходящие строки: "-", "a", "z"
[a-zA-Z5-8]
Выражение: [^a-zA-Z5-8]
Подходящие строки: "0", "-", "+" - ок
Непдходящие строки: "a", "8", "0-+" - не ок
f[ia]*sh
f[ia]sh, f[ia][ia]sh, f[ia][ia][ia]sh, ...
'^'
- начало строки¶Выражение: ^abc
Подходит: abcde
Не подходит: babc
'$'
- конец строки¶Выражение: abc$
Подходит: asdfababc
Не подходит: abcd
"[a-z]" - как найти такую строку?
Ответ:\[a-z\]
'\'
- экранирует любой специальный символ
'|'
- или¶Выражение: abc|de
Подходящие строки: "abc", "de"
Выражение: a(bc|de)z
Подходящие строки: "abcz", "adez"
\b - начало слова или конец слова
\B - всё кроме \b
\s - любой пробельный символ
\S - всё кроме \s
\d - любая цифра
\D - всё кроме \d
\w - любая буква
\W - всё кроме \w
(?i)a(bc|de)z - игнорировать регистр
(?m)a(bc|de)z - матч может занимать несколько строк, ^$ - начало и конец каждой строки
(?s) - . соответствует любому символу, в т.ч. \n
(?u) - включает юникод
(?imsu) - флаги можно группировать
import re
text = """+7(919) 771-67-43 20985 wertw +7(910) 263-12-55 фыва фждлоудт"""
for m in re.finditer('(\+7|8)(([- \(\)]*[0-9]){10})', text):
print(m.group(0), m.start(0), m.end(0))
print(m.group(3))
import re
text = """ +7(919) 771-67-43"""
# re.match ищет совпадение c начале строки
m = re.match('(\+7|8)([- \(\)]*[0-9]){10}', text)
print('match')
if m is not None:
print(m.group(0))
print(m.start(0))
print(m.end(0))
# re.search ищет первое совпадение в строке
m = re.search('(\+7|8)([- \(\)]*[0-9]){10}', text)
print('search')
if m is not None:
print(m.group(0))
print(m.start(0))
print(m.end(0))
# re.fullmatch ищет полное совпадение со строкой
m = re.fullmatch('(\+7|8)([- \(\)]*[0-9]){10}', text)
print('fullmatch')
if m is not None:
print(m.group(0))
print(m.start(0))
print(m.end(0))
import re
# (...), (?P<group_name>...)
text = """+7(919) 771-67-43 20985 wertw +7(910) 263-12-55 фыва фждлоудт"""
for m in re.finditer('(\+7|8)(?P<number>([- \(\)]*[0-9]){10})', text):
print(m.group(0), m.start(0), m.end(0))
print(m.group('number'))
import re
text = """adflljsd 987 asdfadsf, asdf ,as fdfsas979 9873"""
# \1, \2, \3, ... - подстановка значения группы
new_text = re.sub(r"\b([0-9]+)\b", r"(\1)", text)
print(new_text)