#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’