python里使用正则表达式的组匹配自引用

原创 2017年11月14日 17:50:42
在前面学习过组的匹配,也就是一个括号包含就叫做一个组。在一个复杂一点的正则表达式里,比如像(1)(2)(3)这样,就匹配三组,如果想在这个表达式里引用前面匹配的组,怎么办呢?其实最简单的方式是通过组号来引用,比如像(1)(2)(3)——\1。使用“\num”的语法来自引用,如下例子:

#python 3.6
#蔡军生 
#http://blog.csdn.net/caimouse/article/details/51749579
#
import re

address = re.compile(
    r'''

    # The regular name
    (\w+)               # first name
    \s+
    (([\w.]+)\s+)?      # optional middle name or initial
    (\w+)               # last name

    \s+

    <

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

    >
    ''',
    re.VERBOSE | re.IGNORECASE)

candidates = [
    u'First Last <first.last@example.com>',
    u'Different Name <first.last@example.com>',
    u'First Middle Last <first.last@example.com>',
    u'First M. Last <first.last@example.com>',
]

for candidate in candidates:
    print('Candidate:', candidate)
    match = address.search(candidate)
    if match:
        print('  Match name :', match.group(1), match.group(4))
        print('  Match email:', match.group(5))
    else:
        print('  No match')


结果输出如下:

Candidate: First Last <first.last@example.com>
  Match name : First Last
  Match email: first.last@example.com
Candidate: Different Name <first.last@example.com>
  No match
Candidate: First Middle Last <first.last@example.com>
  Match name : First Last
  Match email: first.last@example.com
Candidate: First M. Last <first.last@example.com>
  Match name : First Last
  Match email: first.last@example.com

在这个例子里,就引用了第1组first name和第4组last name的值,实现了前后不一致的EMAIL的姓名,就丢掉它。

深入浅出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 正则表达式--匹配对象和组

所有的语言基本上都有这么强大的用法:正则表达式。
  • cogbee
  • cogbee
  • 2014年04月23日 10:25
  • 2686

python里使用正则表达式的组匹配通过名称自引用

在前学习过正则表达式的组可以通过组号来自引用,看起来使用很简单的样子,其实它还是不容易维护的,比如你某一天需要在这个正则表达式里插入一个组时,就发现后面的组号全打乱了,因此需要一个一个地更改组号,有没...
  • caimouse
  • caimouse
  • 2017年11月14日 18:10
  • 376

Python 使用正则表达式 - 1

正则表达式 python
  • hjh00
  • hjh00
  • 2015年08月19日 16:20
  • 1088

在python中使用正则表达式查找可嵌套字符串组

Python 使用正则匹配查找可嵌套字符串组 在网上看到一个小需求,需要用正则表达式来处理。原需求如下: 找出文本中包含”因为……所以”的句子,并以两个词为中心对齐输出前后3个字,中间全输出,如果“...
  • Foolishwolf_x
  • Foolishwolf_x
  • 2016年01月23日 11:11
  • 1463

python里使用正则表达式的组匹配是否成功之后再自引用

在前面学习了通过名称或组号来引用本身正则表达式里的组内容,可以实现前后关联式的相等判断。如果再更进一步,比如当前面组匹配成功之后,就选择一种模式来识别,而不匹配成功又选择另外一种模式进行识别,这相当于...
  • caimouse
  • caimouse
  • 2017年11月15日 18:13
  • 301

python里使用正则表达式来替换匹配成功的组并输出替换的次数

在前面我们学习过怎么样限制替换的次数,如果我们想知道正则表达式里匹配成功之后,替换字符串的次数,那么需要怎么办呢?这是一个好问题,这时就需要采用另一个外函数subn()了。这个函数不但输出替换后的内容...
  • caimouse
  • caimouse
  • 2017年11月21日 18:12
  • 413

python里使用正则表达式来替换匹配成功的组名

在前面学习了找到组之后,通过组序号来替换,比如像bold.sub(r'\1', text)),这里是通过\1来替换的,这样的方式就是简单,快捷。但是不方便维护,不方便记忆,要想把这点改进一下,就得使用...
  • caimouse
  • caimouse
  • 2017年11月19日 19:17
  • 447

平衡组&递归匹配

平衡组
  • wujingang
  • wujingang
  • 2017年04月23日 21:08
  • 255

正则表达式之平衡组/递归匹配(嵌套匹配)

有时我们需要匹配像( 100 * ( 50 + 15 ) )这样的可嵌套的层次性结构,这时简单地使用/(.+/)则只会匹配到最左边的左括号和最右边的右括号之间的内容(这里我们讨论的是贪婪模式,懒惰模式...
  • wrq147
  • wrq147
  • 2011年01月15日 16:03
  • 4455

使用Python正则表达式RE从CSDN博客源代码中匹配出博客信息

#!coding:utf-8 import re import sys import urllib2 # 测试匹配中文信息 def TestReChinese( ): reload(sy...
  • gatieme
  • gatieme
  • 2015年01月29日 19:23
  • 17448
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python里使用正则表达式的组匹配自引用
举报原因:
原因补充:

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