我感到困惑的下面的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。 –
那是我覺得困惑的部分。其餘的對我來說很有意義。 –