如何在字符串中搜索不同类型的数字

时间:2017-06-08 08:38:42

标签: python string

我有多个字符串,每个字符串包含一年和一些文本。一个字符串的示例是:"The year is 2004"。但是,另一个字符串可能看起来像"this was made in 2003.5"。我如何检查这样的许多字符串并提取正确的数字?

4 个答案:

答案 0 :(得分:0)

您可以在此处使用regex

>>> str = "The year is 2004"
>>> re.findall(r"[-+]?\d*\.\d+|\d+", str)
['2004']

>>> str = "this was made in 2003.5"
>>> re.findall(r"[-+]?\d*\.\d+|\d+", str)
['2003.5']

答案 1 :(得分:0)

您可以使用正则表达式。例如,这将获得给定字符串中的所有数字:

>>> re.findall(r'\d+(?:\.\d+)?', 'year is 2004')
['2004']
>>> re.findall(r'\d+(?:\.\d+)?', 'this was made in 2003.5')
['2003.5']

您可以微调正则表达式以适合您对“正确”数字的定义。

答案 2 :(得分:0)

对于您的数字类型也有效:

def find_number(my_string):
    for element in my_string.split():
        try:
            return int(element)
        except ValueError:
            try:
                return float(element)
            except ValueError:
                pass
my_string = "The year is 2004"
number = find_number(my_string)

这将为您提供两个示例的正确输出。

答案 3 :(得分:0)

使用列表理解而不使用正则表达式

def convert(e):
    try:
        return float(e)
    except:
        return None

str = "the 1st year is 2004"
m = [e for e in str.split(" ") if len(e) >= 4 and convert(e)]
print m 
>>> ['2004']

正如其他人所提到的,不知道什么是"正确"数字很​​难给出适合所有用例的答案。但是,我认为这里正确的数字长度超过4位