2012-10-22 110 views
2

我感到困惑的下面的Python正則表達式的語義:Python正則表達式( .. +)?

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

我看遍了正則表達式的Python文檔部分,但不能讓這種表達的意義。有人可以幫我嗎?

+1

那麼,一次看一件。你知道'\ .. +'作品匹配什麼嗎? – 2012-10-22 22:51:29

+1

見http://www.regex101.com/r/jX3tU9。 –

+0

那是我覺得困惑的部分。其餘的對我來說很有意義。 –

回答

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

+1

這是一個原始字符串,所以不需要轉義反斜槓。它實際上是一個反斜槓,其後是任何字符。 –

+0

哦,對。在這種情況下,這可能是兩個地方之一的拼寫錯誤。我會補充一點。 –

-1

這意味着:字符串/actors,後跟一個可選捕獲組,其中包含文字.,然後是一個或多個非文字.配置爲匹配。

+0

您錯過了模式是原始字符串的事實。您的答案沒有考慮到這一點。 –

+0

@BryanOakley看看標題。這是模棱兩可的,我已經評論過這個問題。在URL中沒有反斜槓也是更有意義的(我認爲這是它匹配的)。 – quantum

1
\\..+ 

這裏,\\是一個轉義字符\,所以它完全匹配的。以下是.,可以匹配任何字符,緊接着又.是必須有至少一次(或更頻繁,所以..+將匹配兩個字符以上。而\\..+將任意兩個或更多字符相匹配,由前綴反斜槓

(\\..+)? 

這一切是一個可選的捕獲組的內部意味着這一切可以留給了爲好。

注意表達可能是錯誤的。它看起來好像你試圖匹配某種URL並想要匹配fil e擴展名,由.字符引入。然而,原始字符串r" "中的\\將匹配\字符,並且不會逃脫該點本身。所以你可能想要r"/actors(\..+)?""/actors(\\..+)?"