С регулярными выражениями python флаги по существу int
s распределены как степени 2. Их значения следующие:
for flag in [re.I, re.L, re.M, re.S, re.U, re.X, re.DEBUG, re.A]:
print(f'{flag.name:>10}', flag + 0, sep='\t')
# IGNORECASE 2
# LOCALE 4
# MULTILINE 8
# DOTALL 16
# UNICODE 32
# VERBOSE 64
# DEBUG 128
# ASCII 256
Несколько ключевых слов могут быть переданы ключевому слову flags
аргумент; документация re
рекомендует использовать побитовый оператор ИЛИ (|
), но, насколько я могу судить, это фактически то же самое, что и оператор сложения (+
). В следующем примере оба оператора выдают 18
.
re.I | re. S
# <RegexFlag.DOTALL|IGNORECASE: 18>
re.I + re. S
# 18
Помимо того, что это официально не рекомендуемый способ сделать это, есть ли практическая причина, почему использование оператора +
может привести к нежелательным результатам?
ПРИМЕЧАНИЕ: Я намерен использовать |
в своем коде. Это чисто академический c вопрос.