2

我对以下 Python 正则表达式的语义感到困惑:

r"/actors(\\..+)?"

我查看了有关正则表达式的 Python 文档部分,但无法理解这个表达式。有人可以帮我吗?

4

3 回答 3

6
/        # 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(\..+)?"

于 2012-10-22T22:58:34.090 回答
1
\\..+

这里,\\是一个转义\字符,所以它确实与那个完全匹配。以下是一个.可以匹配任何字符,后跟另一个.必须至少存在一次(或更频繁。所以..+将匹配两个或更多字符。并且\\..+将匹配任何两个或更多字符,前缀为反斜杠

(\\..+)?

这一切都在一个可选的捕获组中,这意味着这一切也可以被排除在外。

请注意,表达式可能是错误的。看起来好像您正在尝试匹配某种 URL 并想要匹配由.字符引入的文件扩展名。但是,\\原始引用的字符串内部r" "将匹配\字符并且不会转义点本身。所以你可能想要r"/actors(\..+)?"or "/actors(\\..+)?"

于 2012-10-22T22:59:56.427 回答
-1

这意味着: string /actors,后跟一个可选的捕获组,其中包含一个 literal ,然后是一个或多个配置为匹配.的非文字。.

于 2012-10-22T22:58:40.610 回答