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次或多次
雷雷