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