Olej писал(а): ↑16 дек 2022, 21:45
Python
Обработка текстовой информации вообще, и регулярные выражения как самый мощный механизм такой обработки, всё это очень органично вписывается в области использования Python. Поэтому ничего удивительного в том, что поддержка регулярных выражений входят в Python давно и естественным образом.
В Python работа с регулярными выражениями реализована в стандартном модуле re, который входит в стандартный дистрибутив Python (т. е. Ничего не нужно специально предпринимать для его использования):
Код: Выделить всё
$ python3
Python 3.8.10 (default, Nov 14 2022, 12:59:47)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> re.__version__
'2.2.1'
>>> quit()
Несколько примеров того как используются операции модуля re:
Код: Выделить всё
$ cat regexp.py
#!/usr/bin/python3
import re
match = re.search(r'\d\d\D\d\d', r'Телефон 123-12-12')
print(match[0] if match else 'Not found')
match = re.search(r'\d\d\D\d\d', r'Телефон 1231212')
print(match[0] if match else 'Not found')
match = re.fullmatch(r'\d\d\D\d\d', r'12-12')
print('YES' if match else 'NO')
match = re.fullmatch(r'\d\d\D\d\d', r'Т. 12-12')
print('YES' if match else 'NO')
print(re.split(r'\W+', 'Где, скажите мне, мои очки??!'))
print(re.findall(r'\d\d\.\d\d\.\d{4}',
r'Эта строка написана 19.01.2018, а могла бы и 01.09.2017'))
for m in re.finditer(r'\d\d\.\d\d\.\d{4}', r'Эта строка написана 19.01.2018, а могла бы и 01.09.2017'):
print('Дата', m[0], 'начинается с позиции', m.start())
print(re.sub(r'\d\d\.\d\d\.\d{4}',
r'DD.MM.YYYY',
r'Эта строка написана 19.01.2018, а могла бы и 01.09.2017'))
Если функции re.search, re.fullmatch не находят соответствие шаблону в строке, то они возвращают значение None (а функция re.finditer не выдаёт ничего). А если соответствие найдено (что нас зачастую интересует), то возвращается match-объект. Это достаточно сложная структура, содержащая в себе кучу полезной информации о соответствии шаблону (полный набор атрибутов нужно смотреть в документации):
- py.march.png (10.95 КБ) 444 просмотра
И то как это выполняется:
Код: Выделить всё
$ ./regexp.py
23-12
Not found
YES
NO
['Где', 'скажите', 'мне', 'мои', 'очки', '']
['19.01.2018', '01.09.2017']
Дата 19.01.2018 начинается с позиции 20
Дата 01.09.2017 начинается с позиции 45
Эта строка написана DD.MM.YYYY, а могла бы и DD.MM.YYYY