При запуске следующего кода столкнулся с этой ошибкой:
re.error: отсутствует: в позиции 40
import re
re_keywords = ["Bitcoin", "Ethereum", "Tether", r"(?-i)BNB\s+Coin"]
re_keywords = [r"(" + kw + r")" for kw in re_keywords]
re_keywords = "|".join(re_keywords)
re_keywords = r"\b(?:" + re_keywords + r")\b"
print(re_keywords)
re_keywords = re.compile(re_keywords, re.I)
Я использую Python 3.8. Что случилось? Большое спасибо.
Вам просто нужно re_keywords = ["Bitcoin", "Ethereum", "Tether", r"(?i:BNB\s+Coin)"]
, и нет необходимости помещать каждый в круглые скобки (если вы не используете его в re.split
). pattern = re.compile(r"\b(?:{})\b".format("|".join(re_keywords)))
Python не поддерживает ваш встроенный флаг таким образом. re
требуется:
See here
Допустимой формой будет:
(?i)\\b(?:(Bitcoin)|(Ethereum)|(Tether)|(BNB\\s+Coin))\\b
Но флаг меняется с (?-i)
на (?i)
и перемещается в начало
Спасибо. Я хочу, чтобы «BNB» был чувствителен к регистру, а остальные — без учета регистра. Вот почему я использовал (?-i). Есть ли способ добиться этого?
Да, просто используйте флаг без учета регистра re.I
. Не могли бы вы привести несколько примеров соответствия и несоответствия, чтобы мы могли найти шаблон замены, пожалуйста?
Я хочу, чтобы «монета BNB» соответствовала, а «монета bnb» — нет.
Я предлагаю вам создать новый вопрос, который больше сосредоточен на этой проблеме BNB
и bnb
(поскольку этот re.error
изменился на вопрос о нечувствительности к регистру). Пожалуйста, добавьте несколько примеров строк, которые должны и не должны совпадать в этом новом вопросе. Спасибо Виктор
(?-i)
не может быть встроенным