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',)
为什么这段代码不能匹配出数字?
我感觉其实已经匹配出来了,就是0次的数字: 你的.group(0)没有报nonetype错误说明匹配成功了啊
正则表达式30分钟入门教程
>>> print(re.search(r'(\d*)', "abcd1234").group(0)) ########11111111 >>> print(re.search(r'(\d*)', "1234abcd").group(0)) 1234 >>> print(re.search(r'[a-z]*(\d*)', "abcd1234").group(1)) 1234 >>> print(re.search(r'(\d{0})', "abcd1234").group(0)) #######2222222 >>> print(re.search(r'(\d+)', "abcd1234xxx4321").group(0)) 1234 >>> print(re.search(r'(\d+)', "abcd1234xxx4321").group(1)) ####可见re.search第一次匹配成功后就不再接着匹配 1234 >>> print(re.search(r'(\d+)', "abcd1234xxx4321").group(2)) Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: no such group
你试试d,另外*是表示0次或多次
雷雷
因为r'(d*)'中*的意义是匹配0个或多个,所以它可以不匹配任何字符。使用re.search,从字符串开头开始匹配,因为'thenextnothingis123456'第一个字符不是数字,无法匹配,但r'(d*)'可以不匹配任何字符,所以返回空字符串。
而r'(d+)'要求匹配1到多个数字,用来匹配'thenextnothingis123456'时,发现第一个字符不是字母,它还会继续尝试第二个字符,直到字符1开始都是数字,所以匹配了"123456". 查看下面的输出结果就可以明白。
为什么这段代码不能匹配出数字?
我感觉其实已经匹配出来了,就是0次的数字: 你的.group(0)没有报nonetype错误说明匹配成功了啊
正则表达式30分钟入门教程
11111111这一句之所以结果为空,是由于re.search用了#######2222222
你试试d,另外*是表示0次或多次
雷雷