Автор оригинала: Chris.
Во многих функциях Python Regex вы видите третий аргумент Флаги Отказ Что они и как они работают?
Флаги позволяют управлять регулярным механизмом выражения. Поскольку регулярные выражения настолько влиятельны, они являются полезным способом включения и отключения определенных функций (например, игнорировать капитализацию при сопоставлении вашего Regex).
Например, вот как третий аргумент используются в Re.findall ()
Метод :
re.findall(pattern, string, flags=0)
Таким образом, аргумент флагов кажется целочисленным аргументом с значением по умолчанию 0. Чтобы контролировать поведение Regex по умолчанию, вы просто используете одно из предварительно определенных целочисленных значений. Вы можете получить доступ к этим предопределенным значениям через библиотеку Re:
Синтаксис | Имея в виду |
решающее значение Ascii | Если вы не используете этот флаг, специальные символы Regex Python \ W, \ W, \ b, \ b, \ d, \ d, \ s и \ s будут соответствовать символам Unicode. Если вы используете этот флаг, эти специальные символы будут соответствовать только символам ASCII – как указано имя. |
решающее значение A | Так же, как ре. Ascii |
Re.debug. | Если вы используете этот флаг, Python распечатает некоторую полезную информацию в оболочку, которая помогает отладить ваше регулярное выражение. |
решающее значение INGLORECASE. | Если вы используете этот флаг, двигатель Regex будет выполнять совпадение в случае сопоставления. Итак, если вы ищете класс символов [A-Z], он также будет соответствовать [A-Z]. |
решающее значение I | Так же, как ре. INGLORECASE. |
решающее значение Локаль | Не используйте этот флаг – когда-либо. Он обесценился – идея состояла в том, чтобы выполнить сопоставление нечувствительности к регистру в зависимости от вашей текущей местности. Но это не надежно. |
решающее значение L | Так же, как ре. Локаль |
решающее значение Многолетний | Этот флаг включает в следующую функцию: начало строки Regex ‘^’ совпадает в начале каждой строки (а не только в начале строки). То же самое относится и к концу строки Regex ‘$’, который сейчас соответствует также в конце каждой строки в многострочной строке. |
решающее значение M | Так же, как ре. Многолетний |
решающее значение Дозал | Без использования этого флага точечное регулярное выражение. ‘ Соответствует всем персонажам, кроме символа Newline ‘\ N’. Переключите этот флаг, чтобы действительно сопоставить все символы, включая новенький символ. |
решающее значение S | Так же, как ре. Дозал |
решающее значение ПОДРОБНЫЙ | Чтобы улучшить читаемость сложных регулярных выражений, вы можете позволить комментариям и (многострочному) форматированию самого Regeex. Это возможно с этим флагом: все пробелы и строки, которые начинаются с символа «#», игнорируются в Regex. |
решающее значение X | Так же, как ре. ПОДРОБНЫЙ |
Как использовать эти флаги?
Просто включите флаг как необязательный Флаг
Аргумент следующим образом:
import re text = ''' Ha! let me see her: out, alas! he's cold: Her blood is settled, and her joints are stiff; Life and these lips have long been separated: Death lies on her like an untimely frost Upon the sweetest flower of all the field. ''' print(re.findall('HER', text, flags=re.IGNORECASE)) # ['her', 'Her', 'her', 'her']
Как видите, ре. Флаг INGLORECASE гарантирует, что все вхождения строки «ее» совпадают – независимо от их капитализации.
Связанная статья: Python Regex SuperPower – Ultimate Guide
Вы хотите освоить сверхдержаву Regeex? Проверьте мою новую книгу Самый умный способ изучать регулярные выражения в Python С инновационным 3-ступенчатым подходом для активного обучения: (1) Изучение книги главы, (2) Решите головоломки кода и (3) Смотреть воспроизведение главы видео.
Как использовать несколько флагов?
Да, просто добавьте их вместе (суммируйте их) следующим образом:
import re text = ''' Ha! let me see her: out, alas! he's cold: Her blood is settled, and her joints are stiff; Life and these lips have long been separated: Death lies on her like an untimely frost Upon the sweetest flower of all the field. ''' print(re.findall(' HER # Ignored', text, flags=re.IGNORECASE + re.VERBOSE)) # ['her', 'Her', 'her', 'her']
Вы используете оба флага решающее значение INGLORECASE
(Все вхождения нижних или прописные варианты строки «ее» совпадают) и решающее значение Verbose
(игнорировать комментарии и пробелы в Regex). Вы суммируете их вместе решающее значение INGLORECASE + RE. Verbose
чтобы указать, что вы хотите взять оба.
Давайте погрузимся в разные флаги более подробно пример.
решающее значение Ascii
Если вы не используете этот флаг, специальные символы Regex Python \ W, \ W, \ b, \ b, \ d, \ d, \ s и \ s будут соответствовать символам Unicode. Если вы используете этот флаг, эти специальные символы будут соответствовать только символам ASCII – как указано имя.
######################### # re.ASCII ######################### s = 'hello wörld' print(re.findall('\w+', s)) # ['hello', 'wörld'] print(re.findall('\w+', s, flags=re.ASCII)) # ['hello', 'w', 'rld']
Re.debug.
Если вы используете этот флаг, Python распечатает некоторую полезную информацию в оболочку, которая помогает отладить ваше регулярное выражение.
######################### # re.DEBUG ######################### s = 'hello world' print(re.findall('\w+', s, flags=re.DEBUG)) ''' MAX_REPEAT 1 MAXREPEAT IN CATEGORY CATEGORY_WORD 0. INFO 4 0b0 1 MAXREPEAT (to 5) 5: REPEAT_ONE 9 1 MAXREPEAT (to 15) 9. IN 4 (to 14) 11. CATEGORY UNI_WORD 13. FAILURE 14: SUCCESS 15: SUCCESS ['hello', 'world'] '''
решающее значение INGLORECASE.
Если вы используете этот флаг, двигатель Regex будет выполнять совпадение в случае сопоставления. Поэтому, если вы ищете [A-Z], он также будет соответствовать [A-Z].
######################### # re.IGNORECASE ########################## s = 'HELLO world' print(re.findall('[a-z]+', s)) # ['world'] print(re.findall('[a-z]+', s, flags=re.IGNORECASE)) # ['HELLO', 'world']
решающее значение Многолетний
Этот флаг включает в следующую функцию: начало строки Regex ‘^’ совпадает в начале каждой строки (а не только в начале строки). То же самое относится и к концу строки Regex ‘$’, который сейчас соответствует также в конце каждой строки в многострочной строке.
######################### # re.MULTILINE ######################### s = '''hello world''' print(re.findall('^[a-z]+', s)) # ['hello'] print(re.findall('^[a-z]+', s, flags=re.MULTILINE)) # ['hello', 'world']
решающее значение Дозал
Без использования этого флага точечное регулярное выражение. ‘ Соответствует всем персонажам, кроме символа Newline ‘\ N’. Переключите этот флаг, чтобы действительно сопоставить все символы, включая новенький символ.
######################### # re.DOTALL ######################### s = '''hello world''' print(re.findall('.+', s)) # ['hello', 'world'] print(re.findall('.*', s, flags=re.DOTALL)) # ['hello\nworld', '']
решающее значение ПОДРОБНЫЙ
Чтобы улучшить читаемость сложных регулярных выражений, вы можете позволить комментариям и (многострочному) форматированию самого Regeex. Это возможно с этим флагом: все пробелы и строки, которые начинаются с символа «#», игнорируются в Regex.
######################### # re.VERBOSE ######################### s = 'hello world' print(re.findall('.+ #I can now write comments', s, flags=re.VERBOSE)) # ['hello world']
Инженеры Google, Facebook и Amazon являются регулярными мастерами. Если вы хотите стать одним, а также проверить нашу новую книгу: Самый умный способ изучить Python Regex (Amazon Kindle/Print, открывается на новой вкладке) Отказ
Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.
Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.
Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.
Оригинал: “https://blog.finxter.com/python-regex-flags/”