python中的'负'模式匹配

Jos*_*siP 22 python regex

我有以下输入,

OK SYS 10 LEN 20 12 43
1233a.fdads.txt,23 /data/a11134/a.txt
3232b.ddsss.txt,32 /data/d13f11/b.txt
3452d.dsasa.txt,1234 /data/c13af4/f.txt
.
Run Code Online (Sandbox Code Playgroud)

我想提取包含" OK SYS 10 LEN 20"的行和包含单个"."(点)的最后一行之外的所有输入.也就是说,我想提取以下内容

1233a.fdads.txt,23 /data/a11134/a.txt
3232b.ddsss.txt,32 /data/d13f11/b.txt
3452d.dsasa.txt.1234 /data/c13af4/f.txt
Run Code Online (Sandbox Code Playgroud)

我试过以下,

for item in output:
    matchObj = re.search("^(?!OK) | ^(?!\\.)", item)
    if matchObj:
        print "got item "  + item
Run Code Online (Sandbox Code Playgroud)

但它不起作用,因为它不会产生任何输出.

mmd*_*bas 45

看到它的实际效果:

matchObj = re.search("^(?!OK|\\.).*", item)
Run Code Online (Sandbox Code Playgroud)

不要忘记.*在负面预测后放置,否则你无法得到任何匹配;-)

  • 否定的前瞻不匹配任何东西,它只是在匹配之前*前*,并应用于跟随它的下一个模式(例如`.*`)我花了一段时间才弄清楚。 (5认同)

Joc*_*zel 6

 if not (line.startswith("OK ") or line.strip() == "."):
     print line
Run Code Online (Sandbox Code Playgroud)


Mar*_*tos 6

使用否定匹配。(另请注意,默认情况下,在正则表达式中,空格很重要,因此不要将内容隔开。或者,使用re.VERBOSE。)

for item in output:
    matchObj = re.search("^(OK|\\.)", item)
    if not matchObj:
        print "got item " + item
Run Code Online (Sandbox Code Playgroud)