Сравнение строк, содержащих числа в Python - PullRequest
0 голосов
/ 01 марта 2019

У меня есть список строк, и я хотел бы проверить некоторые условия для строк.Например:

String_1: 'The price is 15 euros'. 
String_2: 'The price is 14 euros'. 
Condition: The price is > 14 --> OK 

Как я могу это проверить?Я на самом деле так:

if ('price is 13' in string): 
    print('ok')

и пишу все действительные дела.Я хотел бы иметь только одно условие.

Ответы [ 5 ]

0 голосов
/ 01 марта 2019

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

import re
String_1 = 'The price is 15 euros.'
if float(re.findall(r'\d+', String_1)[0]) > 14:
    print("OK")
0 голосов
/ 01 марта 2019

Вы можете просто сравнивать строки, если они отличаются только числом и числа имеют одинаковое количество цифр.Т.е.:

String_1 = 'The price is 15 euros'
String_2 = 'The price is 14 euros'
String_3 = 'The price is 37 EUR'

Будет естественно отсортировано как String_3> String_1> String_2

Но НЕ будет работать для:

String_4 = 'The price is 114 euros'

itимеет 3 цифры вместо 2, и это будет String_4 <<code>String_3, таким образом

Итак, тем лучше, если вы можете извлечь число из строки, как показано ниже:

import re
def get_price(s):
    m = re.match("The price is ([0-9]*)", s)
    if m:
        return = int(m.group(1))
    return 0

Теперь вы можете сравнивать цены как целое число:

price = get_price(String_1)
if price > 14:
    print ("Okay!")

. . .

if get_price(String_1) > 14:
    print ("Okay!")

([0-9]*) - это группа захвата регулярного выражения, все определенные в круглых скобках будут возвращены в методе group(1)объекта совпадения Python.Вы можете расширить это простое регулярное выражение [0-9]* для своих нужд.

Если у вас есть список строк:

string_list = [String_1, String_2, String_3, String_4]

for s in string_list:
    if get_price(s) > 14:
        print ("'{}' is okay!".format(s))
0 голосов
/ 01 марта 2019

Вы можете перечислить все целые числа в строке и использовать их в операторе if после.

str = "price is 16 euros"
for number in [int(s) for s in str.split() if s.isdigit()]:
    if (number > 14):
        print "ok"

Если ваша строка содержит более одного числа, вы можете выбрать, какое из них вы хотите использовать всписок.

Да, это помогает.

0 голосов
/ 01 марта 2019

Вы можете использовать регулярное выражение для извлечения числа после «price is», а затем преобразовать число в строковом формате в int.И, наконец, для сравнения, если оно больше 14, например:

import re
p = re.compile('price\sis\s\d\d*')
string1 = 'The price is 15 euros'
string2 = 'The price is 14 euros'

number = re.findall(p, string1)[0].split("price is ")

if int(number[1]) > 14:
    print('ok')

Вывод:

ok
0 голосов
/ 01 марта 2019

Формат строки всегда будет одинаковым?Например, он всегда будет начинаться с «Цена есть», а затем будет иметь положительное целое число, а затем будет заканчиваться на «евро». Если это так, вы можете просто разбить строку на слова и проиндексировать целое число, привести его к типу int,и проверьте, что оно больше 14.

if int(s.split()[3]) > 14:
    print('ok')

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

...