Python regex *仅在字符串的开头匹配出现

时间:2015-12-11 06:17:39

标签: python regex

当我在字符串p*上使用正则表达式blackpink时,即使p在字符串中,它也会将空字符串作为匹配返回。

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

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

任何人都能解释一下吗?

2 个答案:

答案 0 :(得分:1)

我认为您正在使用re.match来查找模式的匹配项。正如您从文档中看到的那样:

  

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

     

强调我的

由于p*表示0个或多个字符,贪婪,字符串blackpink的起点只是一个空字符串,''满足您的要求图案。实际上,模式p*将为任意两个字符之间的每个空(0长度)字符串返回成功匹配。

答案 1 :(得分:1)

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

  • 首先,.field = label_tag "tour Categories" %br/ = select_tag "tourcategory", options_from_collection_for_select(Tourcategory.all, 'id', 'title', @tour.tourcategories.map{ |j| j.id }) = f.submit 匹配或更多,而p*匹配一个或更多。
  • 其次,无论该匹配是否为空字符串,您都将获得第一场比赛。
  • 第三,默认情况下正则表达式是贪婪的,所以一旦找到第一个匹配项,它将包含尽可能多的p+

所以,因此,

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