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

原创 2017年11月06日 18:29:47
 在许多的情况下,很多要匹配内容是一起出现,或者一起不出现的。比如《》,< >,这样的括号,不存在使用半个的情况。因此,在正则表达式里也有一致性的判断,要么两个尖括号一起出现,要么一个也不要出现。怎么样来实现这种判断呢?针对这种情况得引入新的正则表达式的语法:(?=pattern),这个语法它会向前搜索或者向后搜索相关内容,如果不会出现就不能匹配。不过,这个匹配不会消耗任何输入的字符,它只是查看一下。例子如下:
 
#python 3.6
#蔡军生 
#http://blog.csdn.net/caimouse/article/details/51749579
#
import re

address = re.compile(
    '''
    # A name is made up of letters, and may include "."
    # for title abbreviations and middle initials.
    ((?P<name>
       ([\w.,]+\s+)*[\w.,]+
     )
     \s+
    ) # name is no longer optional

    # LOOKAHEAD
    # Email addresses are wrapped in angle brackets, but only
    # if both are present or neither is.
    (?= (<.*>$)       # remainder wrapped in angle brackets
        |
        ([^<].*[^>]$) # remainder *not* wrapped in angle brackets
      )

    <? # optional opening angle bracket

    # The address itself: username@domain.tld
    (?P<email>
      [\w\d.+-]+       # username
      @
      ([\w\d.]+\.)+    # domain name prefix
      (com|org|edu)    # limit the allowed top-level domains
    )

    >? # optional closing angle bracket
    ''',
    re.VERBOSE)

candidates = [
    u'First Last <first.last@example.com>',
    u'No Brackets first.last@example.com',
    u'Open Bracket <first.last@example.com',
    u'Close Bracket first.last@example.com>',
]

for candidate in candidates:
    print('Candidate:', candidate)
    match = address.search(candidate)
    if match:
        print('  Name :', match.groupdict()['name'])
        print('  Email:', match.groupdict()['email'])
    else:
        print('  No match')


结果输出如下:
Candidate: First Last <first.last@example.com>
  Name : First Last
  Email: first.last@example.com
Candidate: No Brackets first.last@example.com
  Name : No Brackets
  Email: first.last@example.com
Candidate: Open Bracket <first.last@example.com
  No match
Candidate: Close Bracket first.last@example.com>

  No match

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

Python游戏开发入门

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

你也能动手修改C编译器

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

纸牌游戏开发

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


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

相关文章推荐

正则表达式向前查找和向后查找

向前查找和向后查找 1. 向前查找:根据要匹配的字符序列后面存在一个特定的字符序列(肯定式向前查找)或不存在一个特定的序列(否定式向前查找)来决定是否匹配。.NET将向前查找称之为零宽度向前查找...

LR(1)项目集族的构造:如何确定前向搜索符

按照这个标题搜进来的各位是不是以为这也是和课本一样的内容呢,其实这是我看了两天课本才理解出来的内容啊,绝对和课本不一样。     课本上LR(1)项目集族的构造内容如下:     以S′→·S,#...

WinEdt6+SumatraPDF--实现TeX和PDF文件正反向搜索!(转载)

CTeX v2.8版本的一项重要功能是实现了TeX文档和PDF文件之间的正反向搜索,一般习惯称之为相互跳转。    这项功能是通过对synctex文件的解析实现的,由于现在PDF文件是主流,无论发表...

靓号正则表达式(前后向查找等) 和 apache正则包使用

 开源应用 正则表达式ApacheQQJDK  一般公司在开发一类对的号码时,会预留一些号码给以后升级的会员使用,比如旺旺靓号,QQ号等,采用正则表达式实现较好,通过规则引擎的后台...

python里使用正则表达式的嵌套可选模式

在前面的例子里开始学习组嵌套的模式匹配,然而使用这个嵌套时,如果碰到选择符(|)就要小心一些了,在下面的例子里就演示了两个不同的正则表达式的差别,例子如下:#python 3.6 #蔡军生 #htt...

正则表达式的后向引用

转自: http://deerchao.net/tutorials/regex/regex.htm 使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表...

python里使用正则表达式的非捕获模式

在前面使用了分组的模式来匹配正则表达式,比如'a((a+)|(b+))'的分组功能,就会产生三组值返回,如下:'a((a+)|(b+))' (capturing form)  'abbaabbba' ...

python正则表达式系列(4)——分组和后向引用

分组,即分组匹配,也称为捕获组,是正则中的一种比较重要的匹配方式。此外后向引用和分组相结合,可以写出很多复杂匹配场景的正则。...
  • dnxbjyj
  • dnxbjyj
  • 2017年04月27日 08:03
  • 1650

python里使用正则表达式的groups()函数访问组匹配串

前面通过括号()的方式来匹配正则表达式,会发现有多个成立的,如果把这些匹配的结果放到一个元组里,怎么样访问这些匹配的结果呢?在这里使用groups()函数来访问,如下面的例子:#python 3.6 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python里使用正则表达式的前向搜索或后向搜索模式
举报原因:
原因补充:

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