我对以下Python正则表达式的语义感到困惑:
r"/actors(\\..+)?"
我查阅了Python文档中关于正则表达式的部分,但是不能理解这个表达式。有人能帮帮我吗?
发布于 2012-10-23 06:58:34
/ # literal /
actors # literal actors
( # starting a subpattern
\\ # (escaped) literal \
. # arbitrary character
.+ # 1 or more arbitrary characters
)? # ends the subpattern and makes it optional这意味着,它匹配正斜杠、‘actor’,然后可选地匹配反斜杠和2个或更多任意字符。
我想这里有一个打字错误。要么字符串不应该被标记为raw,要么是有一个反斜杠太多。在这两种情况下,都会有一个转义的.,而不是一个转义的\,后面跟着一个任意字符。这反过来将匹配文件,称为actors,具有任意或缺少的文件扩展名。
所以不是"/actors(\\..+)?"就是r"/actors(\..+)?"。
发布于 2012-10-23 06:59:56
\\..+在这里,\\是一个转义的\字符,所以它确实与那个字符完全匹配。下面是一个可以匹配任何字符的.,后面是另一个必须至少出现一次(或更频繁出现)的.。因此..+将匹配两个或更多个字符。\\..+将匹配任何两个或更多字符,并以反斜杠为前缀。
(\\..+)?所有这一切都在一个可选的捕获组中,这意味着这一切也可以被省略。
请注意,表达式可能是错误的。看起来您正在尝试匹配某种类型的URL,并希望匹配由.字符引入的文件扩展名。但是,原始加引号的字符串r" "中的\\将匹配\字符,并且不会转义点本身。因此,您可能需要r"/actors(\..+)?"或"/actors(\\..+)?"。
发布于 2012-10-23 06:58:41
它的意思是:字符串/actors,后面跟一个可选的捕获组,其中包含一个文字.,然后是一个或多个非文字.配置为匹配的内容。
https://stackoverflow.com/questions/13021093
复制相似问题