если в содержимом сообщения есть число, за которым следует буква, тогда сделайте что-нибудь

#python

#python

Вопрос:

У меня есть скрипт, который очищает некоторые серверы перепродажи. Некоторые люди пишут цену в формате 2,1тыс. Проблема, с которой я сталкиваюсь, заключается в том, что я ищу букву «k» и использую ее в цене, но она ищет слова с буквой «k». например, в объявлении будет показано «Беру 2,1 тыс. за мой продукт», он покажетцена как «Взятие» из-за буквы «k». Как бы мне убедиться, что он ищет только числа, за которыми следует буква K?

         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(" ")
            price = None
            for x in split_message:
                if "$" in x:
                    #if "/" not in x:
                        price = x
                elif "£" in x:
                    #if "/" not in x:
                        price = x
                elif "k" in x:
                    #if "/" not in x:
                        price = x
  

Обновить:

 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. Вы можете попробовать регулярное выражение d (.d )?[kK] .

2. Куда бы я это поместил? извините, я довольно новичок в кодировании.

3. @Abion47 ваш шаблон регулярных выражений не работает, например, заголовок «Получение 2.1k для моего продукта»

4. @Ahmet Это работает отлично .

5. @Abion47 Я обновил сообщение, не могли бы вы проверить, правильно ли я это сделал? Я уверен, что это неправильно.

Ответ №1:

Вы можете сделать это с помощью регулярного выражения:

 re.findall("d (.d )?[kK]", text)
  

Спасибо Abion47

Комментарии:

1. Спасибо, где в коде я бы поместил это? Я довольно новичок в программировании на python.

2. @Lukemul69 просто измените ‘text’ на message.content . Эта функция вернет все вхождения.

3. Я просто попробовал это и думал, что это работает, пока в качестве цены не появилось слово «Банк»

4. Я обновил сообщение, не могли бы вы посмотреть, правильно ли я это сделал?

Ответ №2:

Решение, если вы не хотите использовать регулярное выражение:

 your_str = "Taking $2.1k for my product"
if any([i.endswith('k') and not i[:-1].isalpha() for i in your_str.split()]):
    print("Is not a dm and includes a price")
    do_stuff_you_wanna_do_incase_its_a_price()
  

Комментарии:

1. Извините, где в скрипте я бы это поместил? Я не силен в python

2. Где оригинал, если есть. Оно попадает в тогда и только тогда, когда строка содержит числовую цену, за которой следует ‘k’