2024-10-02 06:21:44 发布
网友
我试图在字符串中找到一个介于1到34之间的数字,但是没有得到预期的输出。 代码:
re.findall("(\d[1-34])","hi34hi30hi12")
输出:
30在哪??还是我做错了??在
那个正则表达式是错的。 正如上面的注释中所说的,正则表达式将匹配一个单个数字\d,然后是集合{1,2,3,4}中的一个字符,这是您使用的字符类[1-34]的显式含义
\d
[1-34]
这个匹配从00到34的所有2位数字:
re.findall("([0-2][0-9]|3[0-4])","hi34hi30hi12")
这个表达式由两部分组成:第一部分
匹配两个字符,第一个是0、1或2,第二个是数字;第二部分是第一个匹配项的替代项(使用|运算符)
|
一个0,一个3,或者一个3,一个匹配。在
因此,根据需要,该表达式匹配从00到34的所有2位数字。在
\d[1-34]实际上匹配一个数字,后跟1-3范围内的数字或“4”。在
\d[1-34]
匹配“34”是因为\d匹配3,然后character类中的4与4匹配。
“12”匹配是因为,\d\匹配1,然后2匹配,因为它在1-3范围内。
\d\
如评论中所述,更好的解决方案是匹配所有2位数字并手动验证范围:
>>> re.findall("(\d\d)","hi34hi30hi12") ['34', '30', '12']
现在迭代列表并验证范围。在
那个正则表达式是错的。 正如上面的注释中所说的,正则表达式将匹配一个单个数字
\d
,然后是集合{1,2,3,4}中的一个字符,这是您使用的字符类[1-34]
的显式含义这个匹配从00到34的所有2位数字:
这个表达式由两部分组成:第一部分
^{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位数字并手动验证范围:
现在迭代列表并验证范围。在
相关问题 更多 >
编程相关推荐