2013-04-20 46 views
0

通過一些舊的代碼去過濾,我已經在這個表達式中的模型過濾跌跌撞撞:Django的怪異的正則表達式

"[[:<:]](%s)[[:>:]]" % value 

我得到的內方括號匹配字符串方括號,但我不能」 t找到任何對冒號和lt/gt的引用。

這應該匹配什麼?

+5

這段代碼的內容是什麼?只是'「[[::<:]](%s)[[:>:]]」%value「並沒有多說'value'要加在'[[::<:]][[:>:]]部分的內部。它是如何稱呼,以及與什麼等? – timss 2013-04-21 00:06:13

+0

@timss哇,4 upvotes,好的。這是來自模型過濾器的正則表達式,就像它在第一句中所說的那樣。問題是關於正則表達式本身。正則表達式匹配的是什麼?插值可以看作是非正則表達式特殊字符串,因此應該忽略。不確定是否有更多的上下文可供參考。 – cbaby 2013-04-21 23:29:31

+0

什麼是「模型過濾器」應該是?或者你的意思是一個_template_過濾器?但無論如何:我希望看到這個「regexp」實際使用的行,因爲這真是一個非常奇怪的模式 - 很奇怪,我懷疑它是一個錯誤,或者不應該用於Python的bultin regexp模塊。 – 2013-04-22 08:04:50

回答

2

正如你的問題的評論者指出的那樣,這可能是一個錯誤,或者是你的鏈條上的某個人。我無法想象它會如何有用。但要明確回答你的問題,這裏有一些它會匹配的東西。這是假設的Python已經取代%sfoo

[]foo:] 
:]foo:] 
<]foo:] 
<]foo>] 
[]foo>] 
[]foo:] 
[]foo[] 

也許這是一個(失敗)試圖找到像<foo>:foo:

正則表達式的解釋(我已經刪除了重複:這是多餘的,並似乎表明,這是所有錯誤,或不打算使用運行Python的re):

[[:<] # match one `[` or `:` or `<` 
]  # one literal right bracket 
( # open capture group 
foo # literal string `foo`, or whatever replaced `%s` 
)  # close capture group 
[[>:] # match one `[` or `>` or `:` 
]  # one literal right bracket 

做什麼這一切意味着什麼?你的猜測和任何人一樣好。