有人可以解释一下,该程序第三行中到底发生了什么

时间:2018-07-30 14:21:08

标签: regex python-3.x

下面显示了代码

import re
line = "dogs are better than humans"
matchObj = re.match( r'(.*) are (.*?) .*', line)
if matchObj:
   print ("matchObj.group() : ", matchObj.group())

1 个答案:

答案 0 :(得分:1)

  • (.*):多次匹配并捕获任何字符(换行符除外)。这可能是零次。 .表示“任何字符”,*表示重复。括号用于表示捕获组(如下所述)。

  • are:文字字符串“为”

  • (.*?):与(.*)相同,只是它尝试匹配的字符越少越好(非贪婪)。这意味着它将尝试尽快停止匹配。如果您的字符串在(.*?)之后包含多个空格,则表达式的这一部分将匹配所有这些空格。添加非贪婪符号(?)将使其停在第一个空格处(因为它是表达式此段之后的字符)。

  • .*任意字符多次。

捕获组或简称捕获是整个比赛的一部分。在正则表达式中包装一个表达式可以使您轻松检索匹配的那部分。

({dogsarebetter than humans

(.*) are (.*?)

.*

在您的示例中,将捕获dogsbetter。这些也称为“组”。在正则表达式中,它们用一对括号标记。

使用正则表达式here。将鼠标悬停在比赛上以查看捕获了表达式的哪些部分。