python正则表达式匹配字符串不以

时间:2016-01-10 14:40:59

标签: python regex

我希望匹配的任何字符串以4321开头 我带着积极的条件来找到它:匹配任何以4321开头的字符串:

^4321.* 

regex here

现在我想扭转这种状况,例如:

  • 1234555传递
  • 12322222 passess
  • None passess
  • 4321ZZZ未通过
  • 43211111未通过

请帮助我尽可能找到最简单的正则表达式。

我使用的是mongo正则表达式,但正则表达式对象是用python构建的,所以请不要在这里使用python代码(如startswith

4 个答案:

答案 0 :(得分:9)

您可以使用负面预测(需要多线修改器):

^(?!4321).*

你也可以使用负面的后卫(现在不匹配空字符串):

(^.{1,3}$|^.{4}(?<!4321).*)

注意:如同另一个答案所述,不需要正则表达式(但由于这是逐字的问题而给出) - &gt;而只是使用if not mystring.startswith('4321')

编辑:我看到你现在明确要求正则表达式,所以拿我的第一个它是我能想到的最短的;)

答案 1 :(得分:3)

你不需要正则表达式。只需使用notstartswith()方法:

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