比较包含 Python 中数字的字符串
Comparing strings containing numbers in Python
我有一个字符串列表,我想验证字符串的一些条件。例如:
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')
我正在写所有有效的案例。
我只想满足一个条件。
字符串格式总是完全一样吗?比如,它总是以 "The price is" 开头,然后有一个正整数,然后以“欧元”结尾?如果是这样,您可以将字符串拆分为单词并索引整数,将其转换为 int,并检查它是否大于 14。
if int(s.split()[3]) > 14:
print('ok')
如果字符串不一致,您可能需要考虑使用正则表达式解决方案来获取句子的数字部分。
您可以列出字符串中的所有整数,然后在 if 语句中使用它们。
str = "price is 16 euros"
for number in [int(s) for s in str.split() if s.isdigit()]:
if (number > 14):
print "ok"
如果您的字符串包含多个数字,您可以select在列表中使用哪一个。
希望有帮助。
您可以使用正则表达式提取"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
如果字符串仅在数字上不同并且数字具有相同的位数,则您可以只比较字符串。即:
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'
它有 3 个数字而不是 2 个数字,它将是 String_4
< 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))
我想你的字符串中只有一个值。所以我们可以用正则表达式来做。
import re
String_1 = 'The price is 15 euros.'
if float(re.findall(r'\d+', String_1)[0]) > 14:
print("OK")
我有一个字符串列表,我想验证字符串的一些条件。例如:
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')
我正在写所有有效的案例。 我只想满足一个条件。
字符串格式总是完全一样吗?比如,它总是以 "The price is" 开头,然后有一个正整数,然后以“欧元”结尾?如果是这样,您可以将字符串拆分为单词并索引整数,将其转换为 int,并检查它是否大于 14。
if int(s.split()[3]) > 14:
print('ok')
如果字符串不一致,您可能需要考虑使用正则表达式解决方案来获取句子的数字部分。
您可以列出字符串中的所有整数,然后在 if 语句中使用它们。
str = "price is 16 euros"
for number in [int(s) for s in str.split() if s.isdigit()]:
if (number > 14):
print "ok"
如果您的字符串包含多个数字,您可以select在列表中使用哪一个。
希望有帮助。
您可以使用正则表达式提取"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
如果字符串仅在数字上不同并且数字具有相同的位数,则您可以只比较字符串。即:
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'
它有 3 个数字而不是 2 个数字,它将是 String_4
< 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))
我想你的字符串中只有一个值。所以我们可以用正则表达式来做。
import re
String_1 = 'The price is 15 euros.'
if float(re.findall(r'\d+', String_1)[0]) > 14:
print("OK")