来自regexr.com的正则表达式在python中不起作用

时间:2017-02-21 14:19:31

标签: python regex

我有这样一个功能:

def get_temperature(s):
        parts = re.findall(r'([+-]?\d+(\.\d+)*)\s?°([CcFf])', s)
        for a in range(len(parts)):
                s = s.replace(parts[a], "qTEMPq")
        return s

函数的输入参数s是字符串值。输出参数也是字符串值。

所以最后,如果我有一个像"It is +25°C outside."这样的字符串作为输入,输出字符串将是"It is qTEMPq outside."

我在extracting temperature degrees (celcius or fahrenheit) from string使用的正则表达式发现子部分类似于(40°F,+ 30°C,-35°C等)。它在regexr.com中完美运行,但在我的代码中却没有。

可能是什么问题,我该如何解决?

3 个答案:

答案 0 :(得分:1)

如果你的正则表达式中有多个组(...),findall将返回一个元组列表。

如果要获取字符串列表,可以使用(?:...)使组无法捕获,如下所示:

import re
def get_temperature(s):
        parts = re.findall(r'(?:[+-]?\d+(?:\.\d+)*)\s?°(?:[CcFf])', s)
        for a in range(len(parts)):
                s = s.replace(parts[a], "qTEMPq")
        return s
get_temperature('40.5°F')
# 'qTEMPq'
get_temperature('100°F is nearly 37°C')
# 'qTEMPq is nearly qTEMPq'
get_temperature("It is +25°C outside.")
# 'It is qTEMPq outside.'

如果你想要的是访问温度的各个部分,你可以这样做(为了得到具有价值和单位的元组):

def get_temperature(s):
        parts = re.findall(r'([+-]?\d+(?:\.\d+)*)\s?°([CcFf])', s)
        return parts

get_temperature("It is +25°C outside.")
#[('+25', 'C')]

或者,如果您只想将整个温度作为字符串:

def get_temperature(s):
        parts = re.findall(r'(?:[+-]?\d+(?:\.\d+)*)\s?°(?:[CcFf])', s)
        return parts
get_temperature('100°F is nearly 37°C')
# ['100°F', '37°C']

答案 1 :(得分:1)

import re
def get_temperature(s):
    return re.sub(r'[+-]?\d+\.*\d*\s?°[CcFf]', 'qTEMPq', s)

这是你要找的吗?

答案 2 :(得分:0)

我已使用“\xb0”代替“°”解决了问题。这是一个编码问题。所以基本上,我没有使用'[+-]?\d+\.*\d*\s?°[CcFf]'表达式,而是使用了'[+-]?\d+\.*\d*\s?\xb0[CcFf]'