如何从字符串中拉出帧并确定哪个帧间最高?

时间:2016-06-24 04:08:04

标签: python python-3.x

例如:

"你好我可以数到4,1 2 3 4。" 它将返回字符串中的最大数字为4。

我需要从字符串中拉出整数并确定哪一个是最高的。我已经玩了一段时间,但是我找不到一个很好的方法来拉出数字。欢迎任何想法。

6 个答案:

答案 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))