例如:
"你好我可以数到4,1 2 3 4。" 它将返回字符串中的最大数字为4。
我需要从字符串中拉出整数并确定哪一个是最高的。我已经玩了一段时间,但是我找不到一个很好的方法来拉出数字。欢迎任何想法。
答案 0 :(得分:2)
家庭作业呃?
import re
for i in re.findall('\d+', "Hello I can count to 4, 1 2 3 4."):
one_int = int(i)
print(one_int)
要在没有正则表达式的情况下执行此操作,您必须遍历字符串中的每个字符,检查其是否为数字并记住其位置。 你找到一个,检查下一个数字是否具有last_position + 1,然后将其合并到最后一个数字,否则发出最后一个数字并记住新数字。最后,发出剩余的记忆数字。
答案 1 :(得分:1)
一线解决方案如下:
max(map(int, re.findall('[-+]?\d+',s)))
解除它:
re.findall('[-+]?\d+',s) #Regex to find all integers (including negatives) in your string "s"
map(int, re.findall('[-+]?\d+',s)) #Converting the found strings to list of integers
max(map(int, re.findall('[-+]?\d+',s))) #Returning the max element
答案 2 :(得分:0)
在可能的分隔符上拆分字符串,并尝试将部件映射到int。只保留可以成功解析的那些,并找到最大值
>>> import re
>>> s = "Hello I can count to 4, 1 2 3 4."
>>> parts = re.split(r"[ \t,.]", s)
>>> ints = []
>>> for part in parts:
>>> try:
>>> ints.append(int(part))
>>> except ValueError:
>>> pass
>>> print(max(ints))
4
答案 3 :(得分:0)
您可以使用isdigit()
功能检查字符是否为数字。创建字符串中所有整数的列表,然后从列表中获取最大值。
str = "Hello I can count to 4, 1 2 3 4"<br/>
int_list = [int(s) for s in str.split() if s.isdigit()]<br/>
print max(int_list)
编辑:
正如TessellatingHeckler所指出的,这不适用于标点符号(例如“4”,因为它没有通过isdigit()
。
答案 4 :(得分:0)
学生可以期待的简单解决方案:
max = None
num = list('0','1','2','3','4','5','6','7','8','9')
for x in str:
if x in num:
if int(x) > max:
max = int(x)
return max
答案 5 :(得分:0)
这是问题的一种功能性方法,它也适用于大于9的数字,但不适用于否定数字:
def split_space(string):
return string.split(" ")
def is_decimal(string):
return string.isdecimal()
def number_or_none_from_string(string):
maybe_number = ""
for character in string:
if is_decimal(character):
maybe_number += character
if maybe_number == "":
return None
return int(maybe_number)
def is_not_none(x):
return x is not None
def max_from_string(string):
"""assumption: all numbers are separated by space"""
numbers_and_none = map(number_or_none_from_string, split_space(string))
numbers = filter(is_not_none, numbers_and_none)
maximum = max(numbers)
return maximum
def max_from_string_short_version(string):
"""assumption: all numbers are separated by space"""
return max(filter(is_not_none, map(number_or_none_from_string, split_space(string))))
phrase = "Hello I can count to 4, 1 2 3 4."
print(max_from_string(phrase))