我感到困惑的下面的Python正则表达式的语义:Python正则表达式( .. +)?
r"/actors(\\..+)?"
我看遍了正则表达式的Python文档部分,但不能让这种表达的意义。有人可以帮我吗?
我感到困惑的下面的Python正则表达式的语义:Python正则表达式( .. +)?
r"/actors(\\..+)?"
我看遍了正则表达式的Python文档部分,但不能让这种表达的意义。有人可以帮我吗?
/ # literal/
actors # literal actors
( # starting a subpattern
\\ # (escaped) literal \
. # arbitrary character
.+ # 1 or more arbitrary characters
)? # ends the subpattern and makes it optional
这将意味着,它匹配正斜杠,'actors',然后可选地反斜杠和2个或更多任意字符。
我想这里有一个错字。字符串不应该被标记为raw,或者有一个反斜杠太多。在这两种情况下,都会有一个转义的.
而不是转义的\
,后面是任意的字符。这反过来会匹配文件,称为actors
与任意或丢失的文件扩展名。
所以要么"/actors(\\..+)?"
要么r"/actors(\..+)?"
。
这是一个原始字符串,所以不需要转义反斜杠。它实际上是一个反斜杠,其后是任何字符。 –
哦,对。在这种情况下,这可能是两个地方之一的拼写错误。我会补充一点。 –
这意味着:字符串/actors
,后跟一个可选捕获组,其中包含文字.
,然后是一个或多个非文字.
配置为匹配。
您错过了模式是原始字符串的事实。您的答案没有考虑到这一点。 –
@BryanOakley看看标题。这是模棱两可的,我已经评论过这个问题。在URL中没有反斜杠也是更有意义的(我认为这是它匹配的)。 – quantum
\\..+
这里,\\
是一个转义字符\
,所以它完全匹配的。以下是.
,可以匹配任何字符,紧接着又.
是必须有至少一次(或更频繁,所以..+
将匹配两个字符以上。而\\..+
将任意两个或更多字符相匹配,由前缀反斜杠。
(\\..+)?
这一切是一个可选的捕获组的内部意味着这一切可以留给了为好。
注意表达可能是错误的。它看起来好像你试图匹配某种URL并想要匹配fil e扩展名,由.
字符引入。然而,原始字符串r" "
中的\\
将匹配\
字符,并且不会逃脱该点本身。所以你可能想要r"/actors(\..+)?"
或"/actors(\\..+)?"
。
那么,一次看一件。你知道'\ .. +'作品匹配什么吗? – 2012-10-22 22:51:29
见http://www.regex101.com/r/jX3tU9。 –
那是我觉得困惑的部分。其余的对我来说很有意义。 –