python中的“negative”模式匹配

2024-04-26 09:34:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下输入

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
.

我想提取所有输入,除了包含 “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

我试了以下几点

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

但它不起作用,因为它不产生任何产出。


Tags: intxtfordatalensysokitem
3条回答

使用否定的匹配。(还要注意,默认情况下,在regex中,空格是很重要的,所以不要将空格分隔开。或者,使用re.VERBOSE。)

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

请看in action

matchObj = re.search("^(?!OK|\\.).*", item)

别忘了把.*放在前面的负数后面,否则你就找不到匹配的;-)

 if not (line.startswith("OK ") or line.strip() == "."):
     print line

相关问题 更多 >