ошибка при использовании регулярных выражений — ожидаемая строка или байтоподобный объект

#python #discord.py

#python #discord.py

Вопрос:

Опубликовано ранее, но я внес некоторые изменения (которые, скорее всего, неверны) Мой скрипт отслеживает любые сообщения, содержащие объявление о продаже, некоторые люди публикуют свою цену в форме «2.1k» (или аналогичную, 1k, 3.5k и т. Д.)

Мой скрипт считывает сообщение, отделяет цену, сохраняет ее как «цена» и отправляет ее во встраивание discord. Проблема, с которой я столкнулся, заключалась в том, что он видел некоторые сообщения и использовал слова с буквой «K» в качестве цены. В одном из примеров в сообщении говорилось

 "Buy from Truster seller (60  Refs)
Lifetime - £4100 // $5300 Obo
Renewal -£3500 // $4500 Obo
US Wire/UK Bank Transfer, Transferwise, PayPal, BTC, Stripe, Rev
Discount for cash in UK
  

И отправленной ценой было слово «Банк»

Я никогда раньше не использовал регулярные выражения, пожалуйста, дайте мне знать, правильно ли я это сделал и что я мог бы сделать, чтобы изменить его.

         check1 = False
        check2 = True
        for x in message.content.lower():
            print(x)
            if x == "k":
                check1 = True
            elif x == "$":
                check1 = True
            elif x == "£":
                check1 = True
        if check1 and check2: #both success so must be correct
            print("Is not a dm and includes a price")
            split_message = message.content.split(" ")
            messageNoBold = message.content.replace('**','')
            price = None
            thePrice = re.findall("d (.d )?[kK]", split_message)
            for x in thePrice:
                
                if "$" in x:
   
                        price = x
                        
                elif "£" in x:
                    
                        price = x
                        
                elif "k" in x:
                    
                        price = x
                        
            print(price)
  

ВОЗВРАТ —

 return _compile(pattern, flags).findall(string)
TypeError: expected string or bytes-like object

  

Ответ №1:

Ваша split_message переменная представляет собой список, а не строку. Вам нужно будет применить регулярное выражение к каждой строке в списке, например:

 for item in split_message:
    thePrice = re.findall("d (.d )?[kK]", split_message)
         for x in thePrice:
                
                if "$" in x:
   
                        price = x
                        
                elif "£" in x:
                    
                        price = x
                        
                elif "k" in x:
                    
                        price = x
  

Это обрабатывает ошибку, которую вы видите, и должно успешно ее устранить. В этом примере табуляции / пробелы испорчены, поэтому не просто копируйте и вставляйте.