python里使用正则表达式的前向搜索否定模式

原创 2017年11月07日 20:52:20
在前面学习前向搜索或后向搜索模式(?=pattern),这个模式里看到有等于号=,它是表示一定相等,其实前向搜索模式里,还有不相等的判断。比如你需要识别EMAIL地址:noreply@example.com,这个EMAIL地址大多数是不需要回复的,所以我们要把这个EMAIL地址识别出来,并且丢掉它。怎么办呢?这时你就需要使用前向搜索否定模式,它的语法是这样:(?!pattern),这里的感叹号就是表示非,不需要的意思。比如遇到这样的字符串:noreply@example.com,它会判断noreply@是否相同,如果相同,就丢掉这个模式识别,不再匹配。例子如下:
#python 3.6
#蔡军生 
#http://blog.csdn.net/caimouse/article/details/51749579
#
import re

address = re.compile(
    '''
    ^

    # An address: username@domain.tld

    # Ignore noreply addresses
    (?!noreply@.*$)

    [\w\d.+-]+       # username
    @
    ([\w\d.]+\.)+    # domain name prefix
    (com|org|edu)    # limit the allowed top-level domains

    $
    ''',
    re.VERBOSE)

candidates = [
    u'first.last@example.com',
    u'noreply@example.com',
]

for candidate in candidates:
    print('Candidate:', candidate)
    match = address.search(candidate)
    if match:
        print('  Match:', candidate[match.start():match.end()])
    else:
        print('  No match')

结果输出如下:
Candidate: first.last@example.com
  Match: first.last@example.com
Candidate: noreply@example.com

  No match

深入浅出Numpy
http://edu.csdn.net/course/detail/6149 

Python游戏开发入门

你也能动手修改C编译器

纸牌游戏开发

http://edu.csdn.net/course/detail/5538 

五子棋游戏开发

http://edu.csdn.net/course/detail/5487
RPG游戏从入门到精通
http://edu.csdn.net/course/detail/5246
WiX安装工具的使用
http://edu.csdn.net/course/detail/5207
俄罗斯方块游戏开发
http://edu.csdn.net/course/detail/5110
boost库入门基础
http://edu.csdn.net/course/detail/5029
Arduino入门基础
http://edu.csdn.net/course/detail/4931
Unity5.x游戏基础入门
http://edu.csdn.net/course/detail/4810
TensorFlow API攻略
http://edu.csdn.net/course/detail/4495
TensorFlow入门基本教程
http://edu.csdn.net/course/detail/4369
C++标准模板库从入门到精通 
http://edu.csdn.net/course/detail/3324
跟老菜鸟学C++
http://edu.csdn.net/course/detail/2901
跟老菜鸟学python
http://edu.csdn.net/course/detail/2592
在VC2015里学会使用tinyxml库
http://edu.csdn.net/course/detail/2590
在Windows下SVN的版本管理与实战 
http://edu.csdn.net/course/detail/2579
Visual Studio 2015开发C++程序的基本使用 
http://edu.csdn.net/course/detail/2570
在VC2015里使用protobuf协议
http://edu.csdn.net/course/detail/2582
在VC2015里学会使用MySQL数据库
http://edu.csdn.net/course/detail/2672



版权声明:本文为博主原创文章,未经博主允许不得转载。

Python正则表达式前向/后向搜索的肯定/否定模式的区别和示例

零宽断言区别   语法 含义 示例 前向搜索肯定模式零宽度正预测先行断言 匹配exp前面的位置 (?=exp) 用\b\w+(?=ing\b)查找I'm singing ...
  • lilongsy
  • lilongsy
  • 2017年11月11日 15:29
  • 380

正则表达式环视否定例子

使用正则表达式来搜索文本是高效快捷的方式,尤其是对于html文件的关键。比如要搜索下文中的红色字体,123testkeyword is ok首先,我写了一个这样的正则表达式:reg = re.comp...
  • vah101
  • vah101
  • 2011年01月30日 22:27
  • 4838

python里使用正则表达式的后向搜索否定模式

在前面学习了前向搜索的否定模式,其实也存在后向搜索的否定模式,就是说先把字符串匹配过后,再来回过头去判断是否不需要的字符串,它的语法是这样: (?#python 3.6 #蔡军生 #http://b...
  • caimouse
  • caimouse
  • 2017年11月08日 17:23
  • 839

谈谈js中的正则表达式第一篇之正向肯定预查和正向否定预查

之前在别人写的瀑布流案例中,发现有这样的正则写法://gi   对于?: 的正则表示方法没有看到过,一下子蒙了,决定好好补充下正则表达式的知识。 引用维基百科对正则表达式的概念,正则表达式的意思是使用...
  • qq_25602411
  • qq_25602411
  • 2017年05月22日 10:07
  • 305

Python正则表达式--前向界定符

前向界定符包括前向肯定界定符和前项否定界定符,如下所示: (?=...) 前向肯定界定符。如果所含正则表达式,以 ... 表示,在当前位置成功匹配时成功,否则失败。但一旦所含表达式已经尝试,匹配引...
  • lwnylslwnyls
  • lwnylslwnyls
  • 2013年05月08日 17:48
  • 1759

特征选择-常见的搜索算法

2.2.1完全搜索   完全搜索分为穷举搜索(Exhaustive)与非穷举搜索(Non-Exhaustive)两类。   (1) 广度优先搜索( Breadth First Search...
  • zhangweijiqn
  • zhangweijiqn
  • 2013年06月17日 10:18
  • 1830

python里使用正则表达式的前向搜索或后向搜索模式

在许多的情况下,很多要匹配内容是一起出现,或者一起不出现的。比如《》,,这样的括号,不存在使用半个的情况。因此,在正则表达式里也有一致性的判断,要么两个尖括号一起出现,要么一个也不要出现。怎么样来实现...
  • caimouse
  • caimouse
  • 2017年11月06日 18:29
  • 940

python里使用正则表达式的重复模式

在前面学习的正则表达式,都是把每一个字符写出来的,但是如果有重复的字符,也需要写出来吗?比如重复1000个字符,这时全写出来就不是很聪明的做法了,那么怎么办呢?可以使用某种规则来生成。如下面的例子:#...
  • caimouse
  • caimouse
  • 2017年10月07日 14:14
  • 597

正则的前向声明和反前向声明

(?=) 前向声明 (?!) 反前向声明 (与前向声明相反) 如: var str = ‘abcacad’; //只匹配后面接有b的a   (?!):不接b的a var re = /a(...
  • u013162144
  • u013162144
  • 2015年04月21日 20:28
  • 440

正则表达式正反向断言

(?=pattern):正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|20...
  • u010112537
  • u010112537
  • 2015年03月10日 15:34
  • 934
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python里使用正则表达式的前向搜索否定模式
举报原因:
原因补充:

(最多只允许输入30个字)