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游戏开发入门

你也能动手修改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 正则表达式 字符串的 匹配 替换 分割 查找

In [1]: import re In [2]: str1='imooc video=1000' In [3]: str1.find('1000')#可以查找出索引值 Out[3]: 12 I...
  • GoodLuckAC
  • GoodLuckAC
  • 2016年12月08日 15:10
  • 6531

python里使用正则表达式的search()函数实现指定位置搜索

前面学习过search()可以从任意一个文本里搜索匹配的字符串,也就是说可以从任何位置里搜索到匹配的字符串。但是现实世界很复杂多变的,比如限定你只能从第100个字符的位置开始匹配,100个字符之前的不...
  • caimouse
  • caimouse
  • 2017年10月17日 17:22
  • 4074

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

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

正则表达式的前向界定

正则表达式 使用前向界定的字符串长度必须是常数 所以数量词 *  +  {} 是没法用在前向界定中的,唯一的例外是?...
  • yunbugui
  • yunbugui
  • 2016年12月22日 18:35
  • 245

正则表达式学习笔记(6)向前查找和向后查找

(六)向前查找和向后查找 1. 向前查找:根据要匹配的字符序列后面存在一个特定的字符序列(肯定式向前查找)或不存在一个特定的序列(否定式向前查找)来决定是否匹配。.NET将向前查找称之为零宽度向...
  • libingxin
  • libingxin
  • 2012年08月07日 22:01
  • 761

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

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

Python进行特征提取

# -*- coding: utf-8 -*- """ Created on Mon Aug 21 10:57:29 2017 @author: 飘的心 """ #过滤式特征选择 #根据方差进行选...
  • piaodexin
  • piaodexin
  • 2017年08月21日 17:11
  • 1021

正则表达式中的反向预搜索和正向预搜索的使用方法

正则表达式中的反向预搜索和正向预搜索的使用方法 表达式 方向 说明 (?=xxx) 正向预搜索(向右) 正向预搜索,判断当前位置右侧是否能匹配指定表...
  • zzz_781111
  • zzz_781111
  • 2013年06月17日 23:01
  • 2772

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

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

比较详细Python正则表达式操作指南(re使用)

Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。Python 1.5之前版本则是通过 regex 模块提供 Emecs 风格的模式。Emacs 风格模式可读性稍差...
  • x1779702681
  • x1779702681
  • 2014年10月24日 10:44
  • 356
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python里使用正则表达式的前向搜索或后向搜索模式
举报原因:
原因补充:

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