我对以下 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
这意味着,它匹配正斜杠、“演员”,然后是可选的反斜杠和 2 个或更多任意字符。
我想这里有一个错字。要么字符串不应该被标记为原始,要么反斜杠太多。在这两种情况下,都会出现转义.
而不是转义\
后跟任意字符。这反过来将匹配文件,调用actors
具有任意或丢失的文件扩展名。
所以要么"/actors(\\..+)?"
要么r"/actors(\..+)?"
。
\\..+
这里,\\
是一个转义\
字符,所以它确实与那个完全匹配。以下是一个.
可以匹配任何字符,后跟另一个.
必须至少存在一次(或更频繁。所以..+
将匹配两个或更多字符。并且\\..+
将匹配任何两个或更多字符,前缀为反斜杠。
(\\..+)?
这一切都在一个可选的捕获组中,这意味着这一切也可以被排除在外。
请注意,表达式可能是错误的。看起来好像您正在尝试匹配某种 URL 并想要匹配由.
字符引入的文件扩展名。但是,\\
原始引用的字符串内部r" "
将匹配\
字符并且不会转义点本身。所以你可能想要r"/actors(\..+)?"
or "/actors(\\..+)?"
。
这意味着: string /actors
,后跟一个可选的捕获组,其中包含一个 literal ,然后是一个或多个配置为匹配.
的非文字。.