Python正则表达式*只匹配字符串开头的事件

Python正则表达式*只匹配字符串开头的事件,python,regex,Python,Regex,当我在stringblackpink上使用regexp*时,它返回空字符串作为匹配项,即使p在字符串中 当我在字符串pinkpink上使用相同的正则表达式p*时,它将匹配并返回p,指示它仅在字符串的开头匹配,即使我没有指定任何类似的内容 特殊的行为是,当我对字符串pink和blackpink使用p+时,在这两种情况下,它都返回p,表示它不关心匹配是在字符串的开头还是内部 有人能解释一下吗?我想你是在用它来寻找你的模式匹配。从文档中可以看到: 如果字符串开头有零个或多个字符,则匹配 正则表达式模式

当我在string
blackpink
上使用regex
p*
时,它返回空字符串作为匹配项,即使p在字符串中

当我在字符串
pinkpink
上使用相同的正则表达式
p*
时,它将匹配并返回
p
,指示它仅在字符串的开头匹配,即使我没有指定任何类似的内容

特殊的行为是,当我对字符串
pink
blackpink
使用
p+
时,在这两种情况下,它都返回
p
,表示它不关心匹配是在字符串的开头还是内部

有人能解释一下吗?

我想你是在用它来寻找你的模式匹配。从文档中可以看到:

如果字符串开头有零个或多个字符,则匹配 正则表达式模式,返回相应的
MatchObject
例如

重点矿山


因为,
p*
表示0个或更多字符,所以字符串
blackpink
的起点只是一个空字符串,
'
,满足您的模式。事实上,模式
p*
将为任意两个字符之间的每个空(0长度)字符串返回成功匹配。

这里有两件重要的事情需要理解:

  • 首先,
    p*
    匹配零个或多个,而
    p+
    匹配一个或多个
  • 其次,您将获得第一个匹配项,无论该匹配项是否为空字符串
  • 第三,正则表达式在默认情况下是贪婪的,因此一旦找到第一个匹配项,它将包含尽可能多的
    p
因此,

  • p*
    on
    blackpink
    匹配字符串开头的零p,即
    '
  • pinkpink
    上的
    p*
    与第一个
    p
    匹配(而不是第二个)
  • blackpink
    上的
    p+
    匹配第六个字母
    p
    ,因为
    +
    的原因,空字符串不再匹配
  • pinkpink
    上的
    p+
    与第一个
    p
    匹配

  • match
    中的
    p+
    regex如何返回与
    blackpink
    的匹配?我无法重现这一点。您如何查找匹配项…您使用的是哪个函数re.search()和re.group():re.search(“p+”,“blackpink”)。group()返回“p”,但
    re.match(“p+”,“blackpink”)
    返回无,而不是
    p