![为什么我的正则表达式代码没有返回任何结果?](https://linux22.com/image/1606741/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E7%9A%84%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E4%BB%A3%E7%A0%81%E6%B2%A1%E6%9C%89%E8%BF%94%E5%9B%9E%E4%BB%BB%E4%BD%95%E7%BB%93%E6%9E%9C%EF%BC%9F.png)
这是我的代码:
import re
word="ABCD 12345"
match=re.search(r"\d*",word)
print(match.group())
对于此代码,我没有得到任何输出(也没有错误)。
请帮忙。这里的问题是什么?
答案1
特殊*
字符表示“匹配零个或多个“。换句话说,\d*
允许零长度匹配 - 并且因为它是正则表达式中唯一的东西,所以整个匹配允许为零长度。
这是*
贪婪的,并且会返回所有数字如果它实际上到达了“12345”存在的位置 - 例如re.match(r"\d*", "12345")
将返回整数:
>>> 重新搜索(r“\d*”,“12345”) <re.Match 对象;跨度=(0,5),匹配='12345'>
但在您的情况下,它实际上并没有到达字符串中的那个位置,而是立即确定位置 0、长度 0 处存在匹配。请注意“span”属性:
>>> re.search(r"\d*", "ABCD 12345") <re.Match 对象;跨度=(0,0), 匹配=''>
您可能想改用\d+
。