Python regex未按预期找到1到34范围内的数字

2024-10-02 06:21:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在字符串中找到一个介于1到34之间的数字,但是没有得到预期的输出。 代码:

re.findall("(\d[1-34])","hi34hi30hi12")

输出:

^{pr2}$

30在哪??还是我做错了??在


Tags: 字符串代码re数字findallpr2hi34hi30hi12
2条回答

那个正则表达式是错的。 正如上面的注释中所说的,正则表达式将匹配一个单个数字\d,然后是集合{1,2,3,4}中的一个字符,这是您使用的字符类[1-34]的显式含义

这个匹配从00到34的所有2位数字:

re.findall("([0-2][0-9]|3[0-4])","hi34hi30hi12")

这个表达式由两部分组成:第一部分

^{pr2}$

匹配两个字符,第一个是0、1或2,第二个是数字;第二部分是第一个匹配项的替代项(使用|运算符)

^{3}$

一个0,一个3,或者一个3,一个匹配。在

因此,根据需要,该表达式匹配从00到34的所有2位数字。在

\d[1-34]实际上匹配一个数字,后跟1-3范围内的数字或“4”。在

  • 匹配“34”是因为\d匹配3,然后character类中的4与4匹配。

  • “12”匹配是因为,\d\匹配1,然后2匹配,因为它在1-3范围内。

如评论中所述,更好的解决方案是匹配所有2位数字并手动验证范围:

>>> re.findall("(\d\d)","hi34hi30hi12")
['34', '30', '12']

现在迭代列表并验证范围。在

相关问题 更多 >

    热门问题