我希望匹配不的任何字符串以4321开头 我带着积极的条件来找到它:匹配任何以4321开头的字符串:
^4321.*
现在我想扭转这种状况,例如:
1234555
传递12322222
passess None
passess 4321ZZZ
未通过43211111
未通过请帮助我尽可能找到最简单的正则表达式。
我使用的是mongo正则表达式,但正则表达式对象是用python构建的,所以请不要在这里使用python代码(如startswith
)
答案 0 :(得分:9)
您可以使用负面预测(需要多线修改器):
^(?!4321).*
你也可以使用负面的后卫(现在不匹配空字符串):
(^.{1,3}$|^.{4}(?<!4321).*)
注意:如同另一个答案所述,不需要正则表达式(但由于这是逐字的问题而给出) - &gt;而只是使用if not mystring.startswith('4321')
。
编辑:我看到你现在明确要求正则表达式,所以拿我的第一个它是我能想到的最短的;)
答案 1 :(得分:3)
你不需要正则表达式。只需使用not
和startswith()
方法:
if not mystring.startswith('4321'):
你甚至可以将它切片并比较相等:
if mystring[:4] != '4321':
答案 2 :(得分:0)
为什么不匹配字符串,并使用int s = in.nextInt();
while (s == 0) {
System.out.println("Wrong, value cannot be 0, please try again!");
s = in.nextInt();
}
return s;
否定布尔值:
not
答案 3 :(得分:0)
谢谢,@ iidos。对于完整的答案,我使用了mongo's
$或opertator
mongo_filter = {'$or': [{'db_field': re.compile("^(?!4321).*$")}, {'db_field1': {'$exists': False}}]})
这不仅确保以4321开头的字符串,还确保字段不存在或None