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

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

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

address = re.compile(
    '''

    # The regular name
    (?P<first_name>\w+)
    \s+
    (([\w.]+)\s+)?      # optional middle name or initial
    (?P<last_name>\w+)

    \s+

    <

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

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

candidates = [
    u'cai junsheng <cai.junsheng@example.com>',
    u'Different Name <cai.junsheng@example.com>',
    u'Cai Middle junsheng <cai.junsheng@example.com>',
    u'Cai M. junsheng <cai.junsheng@example.com>',
]

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


结果输出如下:
Candidate: cai junsheng <cai.junsheng@example.com>
  Match name : cai junsheng
  Match email: cai.junsheng@example.com
Candidate: Different Name <cai.junsheng@example.com>
  No match
Candidate: Cai Middle junsheng <cai.junsheng@example.com>
  Match name : Cai junsheng
  Match email: cai.junsheng@example.com
Candidate: Cai M. junsheng <cai.junsheng@example.com>
  Match name : Cai junsheng
  Match email: cai.junsheng@example.com

在这个例子里,就是通过(?P=first_name)引用。

深入浅出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 正则表达式(分组)

正则表达式分组分组就是用一对圆括号“()”括起来的正则表达式,匹配出的内容就表示一个分组。从正则表达式的左边开始看,看到的第一个左括号“(”表示第一个分组,第二个表示第二个分组,依次类推,需要注意的是...
  • SeeTheWorld518
  • SeeTheWorld518
  • 2015年10月21日 12:47
  • 6450

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

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

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

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

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

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

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

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

python 正则表达式--匹配对象和组

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

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

在前面学习过组的匹配,也就是一个括号包含就叫做一个组。在一个复杂一点的正则表达式里,比如像(1)(2)(3)这样,就匹配三组,如果想在这个表达式里引用前面匹配的组,怎么办呢?其实最简单的方式是通过组号...
  • caimouse
  • caimouse
  • 2017年11月14日 17:50
  • 317

java获取正则表达式匹配结果中的部分内容

在用正则表达式在html代码中找到相应标签后通过分组的方法可以获取整个匹配内容中的你想要的内容Pattern compile1=Pattern.compile("(&lt;div c...
  • Cynicsss
  • Cynicsss
  • 2018年02月12日 20:44
  • 10

正则表达式和python结合

常见正则表达式符号和特殊符号表 记号 说明 实例 literal 匹配字符串的值 abc re1|re2 匹配正则表达式re1或re2 abc|123 .(do...
  • dongfei2033
  • dongfei2033
  • 2017年08月11日 00:45
  • 284

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

Python 使用正则匹配查找可嵌套字符串组 在网上看到一个小需求,需要用正则表达式来处理。原需求如下: 找出文本中包含”因为……所以”的句子,并以两个词为中心对齐输出前后3个字,中间全输出,如果“...
  • Foolishwolf_x
  • Foolishwolf_x
  • 2016年01月23日 11:11
  • 1463
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python里使用正则表达式的组匹配通过名称自引用
举报原因:
原因补充:

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