我希望我的正则表达式匹配某些值,但不接受其他值。基本正则表达式是 ^/.+/.+$
我不想在最后的 /
部分接受问号,并且不接受 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]
来不匹配字符,但它不适用于整个字符串。
有什么帮助吗?
最佳答案
在最后一个 /
后拒绝问号很容易 - 使用字符类 [^?]
而不是 。
:
^/.+/[^?]+$
要拒绝两个/
之间的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
关于python - 如何使正则表达式不接受某些值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14779057/