с re.compile (flags =), как работают операторы | и + разные (если вообще)? - PullRequest
1 голос
/ 15 апреля 2020

С регулярными выражениями 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 вопрос.

...