python - 正则表达式中*的疑问

查看:85
本文介绍了python - 正则表达式中*的疑问的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

import re
text = 'thenextnothingis123456'
print(re.search(r'(\d*)', text).group(0))

为什么这段代码不能匹配出数字?如果将d替换成w反倒可以匹配出所有字符?

解决方案

因为r'(\d*)'中*的意义是匹配0个或多个,所以它可以不匹配任何字符。使用re.search,从字符串开头开始匹配,因为'thenextnothingis123456'第一个字符不是数字,无法匹配,但r'(d*)'可以不匹配任何字符,所以返回空字符串。

而r'(d+)'要求匹配1到多个数字,用来匹配'thenextnothingis123456'时,发现第一个字符不是字母,它还会继续尝试第二个字符,直到字符1开始都是数字,所以匹配了"123456". 查看下面的输出结果就可以明白。

>>> import re
>>> text = 'thenextnothingis123456'
>>> p = re.search(r'(\d*)', text)
>>> p.start()
0
>>> p.end()
0
>>> p.groups()
('',)
>>> p = re.search(r'(\d+)', text)
>>> p.start()
16
>>> p.end()
22
>>> p.groups()
('123456',)

这篇关于python - 正则表达式中*的疑问的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆