2012-10-09 263 views
2

讓我們假設我們有以下一系列的URI:URI正則表達式模式匹配

答:/用戶/ A/B/C

B:/用戶/ A/B/F/d

C:/用戶/ A/b/E

d:/用戶/ A/K/R

我需要在Python匹配除了規則B.所有規則正則表達式。因此,應該滿足所有以/user/a開頭的URI,但它應該排除以結尾的URI。

非常感謝!

更新:路徑的段不是單個字符,而是整個單詞。例如d可以是「發送」。

回答

1

基於極慢,確切的解決我的問題的答案是:

(?!.*d)\/user/a/.* 

注意,d和對應於整個單詞。因此,一個示例是:

(?!.*send)\/user/myapp/.* 
3

如何像:

^/user/a/.*[^d]$ 

讀爲「開始/用戶/ A /,那麼任何數目的其它字符,然後最後的字符,它不能是d

0

也許只是更清晰的使用方法:

a = '/user/a/b/f/d' 
b = s.strip('/').split('/') 
if b[:2] == ['user', 'a'] and b[-1] != 'd': 
    pass # whatever 

或者,如果你通過/的不是分裂,那麼:

if a.startswith('/user/a') and not a.endswith('d'): 
    pass # whatever 
+0

第二種方法易於閱讀且有意義。鑑於對問題的簡單描述,我認爲即使段可能是文字,也不會涵蓋任何角落案例。這是一個列表理解版本 - https://www.refheap.com/paste/5621/raw –

1

嘗試了這一點:

(?!.*\/d)\/user\/a.* 

- >提前負的樣子斷言,基本上說,它不與/ d

結束教人以漁(*/d?!):

http://rubular.com/

輸入測試字符串和玩的正則表達式:)