凤凰求蛊
正如re.search() 的文档所说:扫描字符串寻找正则表达式模式产生匹配的第一个位置,并返回相应的匹配对象。如果字符串中没有位置与模式匹配,则返回 None;请注意,这与在字符串中的某个点找到零长度匹配不同。(强调我的)您的第一个 RegExx*匹配零个或多个character x。在所有匹配项中,返回第一个匹配项。您的模式与字符串的开头匹配,因为它是zero 'x's. <re.Match object; span=(0, 0), match=''>因此,您的比赛在位置 0 ( )开始和结束。当您搜索时,x+这意味着一个或多个 character x。您的字符串中唯一x的位置是位置2(第三个字符,但我们从 0 开始计数)。它是一个字符长,所以它在位置 3 结束。因此你的 result <re.Match object; span=(2, 3), match='x'>。如果您查看所有匹配项而不仅仅是第一个匹配项,您也会看到其他匹配项!你可以这样做,例如使用re.findall()例子:>>> re.findall(r'x+', 'abxb')['x']>>> re.findall(r'x*', 'abxb')['', '', 'x', '', '']如您所见,匹配零个或多个意味着我们也匹配了字母之间所有不存在的字符!当与其他模式结合使用时,零或更多的这个特性会更有用,即如果我们想说一个字符或单词在我们的匹配中是可选的。假设我们想要匹配所有b后跟零个或多个xes 的 s:>>> re.findall(r'bx*', 'abxb')['bx', 'b']