Невозможно сопоставить регулярное выражение с re.search на Twisted Framework ircbot

Я начну с "Я не знаком с Python". Я пытаюсь изменить сценарий ircbot по умолчанию с витой для моего канала, но я не могу получить re.match или же re.search за работой.

Например, это работает:

prompt = ("%s" % self.nickname)
prompt1 = ("%s:" % self.nickname)
prompt2 = ("%s," % self.nickname)

if msg == (prompt1 + " whoareyou?") or msg == (prompt2 + " who are you?") or msg == (prompt1 + " whoareyou") or msg == (prompt2 + " who are you"):

И этот

if msg == (prompt1 + " help") or msg == (prompt2 + " help"):

Однако эти два условия не работают на боте (но они работают на локальном скрипте):

if re.search(r'%s[:,] help' % self.nickname, msg):

elif re.search(r'%s[:,] who ?are ?you?' % self.nickname, msg):

Предыдущая версия скрипта, которая не использует re.search можно найти здесь

1 ответ

Я нашел то, что вызывало проблему. В Twisted включена логика для обработки коллизий псевдонимов для бота. Добавляет ^ в конце названия:

# For fun, override the method that determines how a nickname is changed on
# collisions. The default method appends an underscore.
def alterCollidedNick(self, nickname):
    """
    Generate an altered version of a nickname that caused a collision in an
    effort to create an unused related name for subsequent registration.
    """
    return nickname + '^'

Это приводило к тому, что мой ник для ботов заканчивался nickname^и потому что я использовал %s чтобы добавить переменную псевдонима как часть регулярного выражения, он интерпретировал ^ в качестве модификатора.

if re.search(r'%s[:,] help' % self.nickname, msg):

К этому:

if re.search(r'nickname^[:,] help', msg):
Другие вопросы по тегам