python - 如何使正则表达式不接受某些值?

标签 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] 来不匹配字符,但它不适用于整个字符串。

有什么帮助吗?

最佳答案

在最后一个 / 后拒绝问号很容易 - 使用字符类 [^?] 而不是 :

^/.+/[^?]+$

要拒绝两个/之间的peopledungen,你可以使用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/

相关文章:

python - 如何在文本元素后附加 <br> 标签?

regex - 如何在第一个大写字符之前创建一个以文件名的一部分命名的文件夹,并将相应的文件移动到新目录中

javascript - 正则表达式匹配任何 Javascript/jQuery 函数声明行

python - 如何根据 Pandas 中一系列列的特定条件选择行

python - 隐藏的字典键

python - 执行 re.search() 直到行尾,然后更新数据帧

regex - Perl 正则表达式删除引号之间的逗号?

python - 在 python 中,如何计算函数中满足条件的次数?

Ruby 将不可打印的字符转换为数字

java - 模式和匹配器在 Java 中不起作用