我希望我的正则表达式匹配某些值,但不接受其他值。基本正则表达式为^/.+/.+$
我希望不接受上一个/
部分中的问号,而不接受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]
以便不匹配字符,但它不适用于整个字符串。
任何帮助?
答案 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)/).+/[^?]+$