如何让正则表达式不接受某些值?

时间:2013-02-08 18:31:05

标签: python regex

我希望我的正则表达式匹配某些值,但不接受其他值。基本正则表达式为^/.+/.+$

我希望不接受上一个/部分中的问号,而不接受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]以便不匹配字符,但它不适用于整个字符串。

任何帮助?

2 个答案:

答案 0 :(得分:4)

在上一个/之后拒绝问号非常简单 - 使用字符类[^?]代替.

^/.+/[^?]+$

要拒绝两个people之间的dungen/,您可以使用negative lookahead。由于您要拒绝/people/但接受/peoples/,因此前瞻一直看到字符串的结尾。

^/(?!(?: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

答案 1 :(得分:1)

您可以使用

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