当re.findall找不到模式时该怎么办

时间:2017-06-19 15:58:59

标签: python python-3.x

def get_project_name(project_string):
    GG = '%.2f' % (float(re.findall(r"\d+\.?\d*", str(project_string))[0]))
    print (GG)
    return GG

有时,此函数获取的条目为空,这会导致“索引超出范围错误”。

如何修复它以忽略空白的条目然后继续?谢谢。

2 个答案:

答案 0 :(得分:2)

您可以使用tryexcept

def get_project_name(project_string):
    try:
       GG = '%.2f' % (float(re.findall(r"\d+\.?\d*", str(project_string))[0]))
       print GG
       return GG
    except Exception:
       print "Some error message"

答案 1 :(得分:0)

如果要对“找到”和“未找到”情况应用相同的逻辑,您还可以使用next和默认值(分开一点以使其更清晰):

p = r"\d+\.?\d*"
text = str(project_string)
GG = '%.2f' % (float(next(re.findall(p, text), 0.0)))

但是如果你只需要第一场比赛,那么使用re.finditerre.search实际上会更好,但那些会返回Match个对象,而不是直接匹配的字符串。

m = re.search(p, text)
GG = '%.2f' % (float(m.group()) if m else 0.0)