如何让正则表达式不接受某些值?
我想让我的正则表达式匹配一些值,但不接受其他值。基础的正则表达式是 ^/.+/.+$
我希望最后一个 /
后面不接受问号,并且第一个 /
前面不接受 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]
来表示不匹配某些字符,但这对整个字符串不管用。
谁能帮帮我?
2 个回答
1
你可以使用
^/(?!(people|dungen)/).+/[^?]+$
4
在最后一个 /
后面拒绝问号很简单 - 用一个字符类 [^?]
来代替 .
:
^/.+/[^?]+$
如果你想在两个 /
之间拒绝 people
或 dungen
,可以使用负向前瞻。因为你想拒绝 /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