簡體   English   中英

regexr.com的正則表達式在python中不起作用

[英]regular expression from regexr.com doesn't work in python

我有這樣的功能:

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."

從字符串中提取溫度度(攝氏度或華氏度)時使用的正則表達式會發現類似於(40°F,+ 30°C,-35°C等)的子部分。 它在regexr.com可以完美regexr.com ,但在我的代碼中卻不能。

可能是什么問題,我該如何解決?

如果您的正則表達式中有多個(...)組,則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']
import re
def get_temperature(s):
    return re.sub(r'[+-]?\d+\.*\d*\s?°[CcFf]', 'qTEMPq', s)

這是您要找的東西嗎?

我已經解決了問題,方法是使用“ \\xb0 ”而不是“ ° ”。 這是一個編碼問題。 因此,基本上,我不是使用'[+-]?\\d+\\.*\\d*\\s?°[CcFf]'表達式,而是使用了'[+-]?\\d+\\.*\\d*\\s?\\xb0[CcFf]'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM