Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个python正则表达式不匹配任何组?_Python_Regex - Fatal编程技术网

为什么这个python正则表达式不匹配任何组?

为什么这个python正则表达式不匹配任何组?,python,regex,Python,Regex,在专用工具中使用一些继承的代码帮助朋友 我们都不太熟悉Python或正则表达式 在下面的代码中,当我使用Pythex()时,degF正则表达式匹配2个组,但不返回任何组。我做错了什么 # This Python file uses the following encoding: utf-8 import os, sys import re testString = "Friday: Thundery Shower, Maximum Temperature: 27°C (81°F) Minimu

在专用工具中使用一些继承的代码帮助朋友

我们都不太熟悉Python或正则表达式

在下面的代码中,当我使用Pythex()时,degF正则表达式匹配2个组,但不返回任何组。我做错了什么

# This Python file uses the following encoding: utf-8
import os, sys
import re

testString = "Friday: Thundery Shower, Maximum Temperature: 27°C (81°F) Minimum Temperature: 17°C (63°F)"

t = re.match("^([^:]+):\s*([^,]+)", testString)
degF = re.match("^(\d+.F\))", testString)

print t .           # _sre.SRE_Match object
print t.group(1)    # Friday
print t.group(2)    # Thundery Shower
print degF          # None

# print "Max temp " + degF.group(1)
# print "Min temp " + degF.group(2)

这里的regexp以
^
开头(另外
re.match
仅在字符串开头匹配),但是
testString
不是以数字序列开头。

这里的regexp以
^
开头(另外
re.match
仅在字符串开头匹配),但是您的
测试字符串
不是以数字序列开头。

您在模式中使用了
来匹配度符号。但是,一个
匹配一个字节,而
°
实际上有两个字节长:

print len('°') # => 2
因此,您可以在
degF
模式(或
\W*
中使用
°
而不是
来匹配零个或多个非单词字符,即
r“(\d+\W+F)\”
),如果您不打算只在字符串开头匹配,请使用
到处搜索
,并删除
^

degF = re.findall(r"(\d+°F)\)", testString)
print(degF)                                 # => ['81\xc2\xb0F', '63\xc2\xb0F']


您可以将未缩放的
移动到
\d+
之后的右边,以仅匹配整数。您可以将
\d
更改为
\d[\d.]*
以匹配浮点数或整数。

您在模式中使用了
来匹配度符号。但是,一个
匹配一个字节,而
°
实际上有两个字节长:

print len('°') # => 2
因此,您可以在
degF
模式(或
\W*
中使用
°
而不是
来匹配零个或多个非单词字符,即
r“(\d+\W+F)\”
),如果您不打算只在字符串开头匹配,请使用
到处搜索
,并删除
^

degF = re.findall(r"(\d+°F)\)", testString)
print(degF)                                 # => ['81\xc2\xb0F', '63\xc2\xb0F']


您可以将未缩放的
移动到
\d+
之后的右边,以仅匹配整数。您可以将
\d
更改为
\d[\d.]*
以匹配浮点数或整数。

您的字符串包含ASCII范围之外的字符,这些字符用两个字节(UTF-8)编码,但您的字符串未定义为unicode字符串,并且图形名
°
被视为两个不同的字符

如果希望点作为单个图形匹配
°
,则需要将字符串定义为unicode字符串:

testString = u"Friday: Thundery Shower, Maximum Temperature: 27°C (81°F) Minimum Temperature: 17°C (63°F)"

然后模式
\d+.F
将匹配,不会出现任何问题。

您的字符串包含ASCII范围以外的字符,这些字符用两个字节(UTF-8)编码,但您的字符串未定义为unicode字符串,并且图形名
°
被视为两个不同的字符

如果希望点作为单个图形匹配
°
,则需要将字符串定义为unicode字符串:

testString = u"Friday: Thundery Shower, Maximum Temperature: 27°C (81°F) Minimum Temperature: 17°C (63°F)"

然后模式
\d+.F
将毫无问题地匹配。

re.match(^(\d+.F\)”
您正在字符串开头查找温度。如果要提取温度值,请使用此选项:
re.findall('(\d+°\w+),teststring)
re.findall('(\d+°[F | C]),a)
您的表达式工作:
re.match(^(\d+.F\)”
您正在字符串开头查找温度。如果您想提取温度值,请使用此选项:
re.findall('(\d+°\w+),teststring)
re.findall('(\d+°[F | C]),a)
您的表达式工作:啊,这是早期测试的遗留问题,但即使是像([0-9]+.F])这样的东西也不是working@Rob,即使您使用
re.search
?degF=re.search(([0-9]+.F)),testString也会给我None@RobCowell:这同样有效:,这里一定有一些不同。使用
r“(\d+°F\)”
Ah,这是早期测试的遗留问题,但甚至类似于([0-9]+.F))不是吗working@Rob,即使您使用
re.search
?degF=re.search(([0-9]+.F)),testString也会给我None@RobCowell:这同样有效:,这里一定有一些不同。使用
r“(\d+°F\)”
最接近的-只需计算捕捉第(2)组中的第二个°F值否,您只想使用
re.findall
then.Ah,最初很混乱,因为一个返回列表,另一个返回MatchObject,所以不同的语法将它们拉回来,但现在得到了它,感谢最终代码作为参考-#此Python文件使用以下编码:utf-8导入os,sys import re testString=“星期五:雷雨阵雨,最高温度:27℃(81℉)最低温度:17℃(63℉)”t=re.match(^([^:+):\s*(^,]+”,testString)#degF=re.findall(([0-9]+.F)),testString)degF=re.findall(r)(\d+°F)),testString)print t t t t t t t t t.group(1)#星期五打印t.group(2)#雷雨阵雨打印degF print”Max temp“+degF[0]打印最接近的“Min temp F”+degF[1”-只需解决捕获组(2)中的第二个°F值的问题。不,您只需要使用
re.findall
即可。啊,最初很困惑,因为一个返回列表,另一个返回匹配对象,所以不同的语法将它们拉回来,但现在得到了它,感谢最终代码供参考-#此Python文件使用以下编码:utf-8导入操作系统,sys-import-re-testString=“星期五:雷雨阵雨,最高温度:27°C(81°F)最低温度:17°C(63°F)”t=re.match(^([^:]+):\s*([^,]+),testString)#degF=re.findall((([0-9]+.F)),testString)degF=re.findall(r)(\d+.F))“,测试字符串)打印t打印t组(1)#周五打印t组(2)#雷雨雨打印degF打印“最高温度F”+degF[0]打印“最低温度F”+degF[1]