Python 2.7的官网文档中的解释是:
(?!...) Matches if ... doesn’t match next. This is a negative lookahead assertion. For example, Isaac (?!Asimov) will match 'Isaac ' only if it’s not followed by 'Asimov'.
下面,就来详细解释一下其中的含义:
1.negative lookahead assertion,此处我将其翻译为 前向否定匹配 或 前向否定断言
2.从字面意思就能看出,其含义是,从当前匹配的地方,继续向前看(lookahead),然后不希望(negative)找到对应的内容
其不论是语法还是所表示的含义,都正与:
【教程】详解Python正则表达式之: (?=…) lookahead assertion 前向匹配 /前向断言
相反;
关于示例代码,暂时就用回答某人的问题的那个代码:
#!/usr/bin/python # -*- coding: utf-8 -*- """ Function: 【教程】详解Python正则表达式之: (?!…) negative lookahead assertion 前向否定匹配 /前向否定断言 https://www.crifan.com/detailed_explanation_about_python_regular_express_negative_lookahead_assertion Author: Crifan Li Version: 2012-12-08 Contact: admin at crifan dot com """ import re; txt ="bn','dd_ff');xm_a([1,'zhangming',0,2,'yuwenjige','lishijige',1,0,3,1,0,0.999,1,1,0,0]);xm_a([2,'wangmeng',0,2,'shuxuejige','dilijige',1,0,3,1,0,0.999,1,1,1,0]);xm_a([3,'wangli',0,2,'shuxuejige','dilijige',1,0,2,0,0,0.999,1,1,1,0]);zuobi(6,3,'4:5');fg_gh('xxx','vb_4');xm_a([4,'dashan',0,2,'huaxuejige','yingyujige',1,0,3,1,1,0.999,0,1,0,0]);"; #下面是普通的,常见的那种,搜索符合某种格式的字符串 allJigeIncludeZuobi = re.findall("xm_a\(\[\d+,'(\w+)',[^\(\)\[\]]+\]\);", txt); print allJigeIncludeZuobi; #['zhangming', 'wangmeng', 'wangli', 'dashan'] #而对于其中,想要排除掉某种特殊的情况 #比如此处希望后面不带作弊的,即后面没有zuobi字样的 #则就可以使用 前向否定匹配,添加上对应的,不希望出现的内容,就可以过滤掉,对应的项了 #此处就可以实现,过滤掉作弊那位:wangli allJigeNoZuobi = re.findall("xm_a\(\[\d+,'(\w+)',[^\(\)\[\]]+\]\);(?!zuobi)", txt); print allJigeNoZuobi; #['zhangming', 'wangmeng', 'dashan']
【总结】
negative lookahead assertion,就是,除了正常的搜索匹配之外,继续往前走两步,继续看看,不要出现某些内容
以达到,在正常匹配到的内容的基础上,过滤掉某种不想要的内容。
转载请注明:在路上 » 【教程】详解Python正则表达式之: (?!…) negative lookahead assertion 前向否定匹配 /前向否定断言