2013-02-08 2 views
4

Я хочу, чтобы мое регулярное выражение соответствовало некоторым значениям, но не принимало других. Основание регулярное выражение ^/.+/.+$Как я могу заставить регулярное выражение не принимать некоторые значения?

Я хочу, чтобы не принимать вопросы отметку в последней / части, а не принимать people или dungen в качестве первого / части.

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

Отклонения вопросительных знаков после последнего / прост - использовать класс символов [^?] вместо .:

^/.+/[^?]+$ 

Отвергнуть people или dungen между двумя / с, вы можете использовать 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

+0

@JBernardo отредактировал. –

1

Вы можете использовать

^/(?!(people|dungen)/).+/[^?]+$ 
Смежные вопросы