2013-02-08 34 views
4

我想我的正則表達式匹配一些值,但不接受其他值。該基地正則表達式是^/.+/.+$如何讓正則表達式不接受某些值?

我想不接受最後/部分的問號,而不是接受peopledungen作爲第一/部分。

MATCH: /a/b/c/d 
MATCH: /a/b 
NO MATCH: /people/b/c/d 
MATCH: /peoples/b/c/d 
NO MATCH: /a/b/c?x=y 

我知道你可以以不匹配字符使用[^ABCD],但它不會與整個字符串的工作。

任何幫助?

回答

4

拒絕問號最後/後很容易 - 用一個字符類[^?]而不是.

^/.+/[^?]+$ 

要在兩個/秒之間拒絕peopledungen,您可以使用negative lookahead。既然你想要拒絕/people/,但接受/peoples/,那麼這個lookahead一直到字符串的末尾。

^/(?!(?:people|dungen)/.+$).+/.+$ 

所以兩者結合:

^/(?!(?:people|dungen)/[^?]+$).+/[^?]+$ 

讓我們來測試。

>>> import re 
>>> r = re.compile(r'^/(?!(?:people|dungen)/[^?]+$).+/[^?]+$') 
>>> for s in ['/a/b/c/d', '/a/b', '/people/b/c/d', '/peoples/b/c/d', '/a/b/c?x=y']: 
...  print not not r.search(s) 
... 
True 
True 
False 
True 
False 
+0

@JBernardo怎麼會這樣? – NullUserException 2013-02-08 18:44:29

+0

@JBernardo編輯。 – 2013-02-08 18:49:24

1

你可以使用

^/(?!(people|dungen)/).+/[^?]+$