繁体   English   中英

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

[英]python regex match string does not start with

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

^4321.* 

正则表达式在这里

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

  • 1234555通过
  • 12322222
  • None过路
  • 4321ZZZ不通过
  • 43211111没有通过

请帮助我找到最简单的正则表达式,以实现这一目标。

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

您可以使用负前瞻(需要多线修改器):

^(?!4321).*

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

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

注意:像另一个答案所说的那样,正则表达式不是必需的(但是由于这是逐字的问题而给出) - >只是使用if not mystring.startswith('4321')

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

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

if not mystring.startswith('4321'):

你甚至可以将它切片并比较相等:

if mystring[:4] != '4321':

为什么不匹配字符串,并使用not否定布尔值:

import re
result = re.match('^4321.*', value)
if not result:
    print('no match!')

谢谢@idos。 对于完整的答案,我使用了mongo's $或opertator

mongo_filter = {'$or': [{'db_field': re.compile("^(?!4321).*$")}, {'db_field1': {'$exists': False}}]})

这不仅可以确保以4321开头的字符串,还可以确保字段不存在或者为None

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM