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

2 に答える 2

4

最後の後に疑問符を拒否するのは簡単です-代わりに/文字クラスを使用してください:[^?].

^/.+/[^?]+$

拒否するpeopledungen、2つの間にある場合は、負の先読み/を使用できます。先読みを拒否したいが受け入れるので、文字列の最後までずっと見えます。/people//peoples/

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

したがって、2つを組み合わせる:

^/(?!(?: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
于 2013-02-08T18:33:25.677 に答える
1

あなたが使うことができます

^/(?!(people|dungen)/).+/[^?]+$
于 2013-02-08T18:49:57.843 に答える