博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 正则表达式sub函数和正则匹配对象Match Objects
阅读量:6602 次
发布时间:2019-06-24

本文共 1915 字,大约阅读时间需要 6 分钟。

hot3.png

一、正则匹配中的“组(group)”的概念.

        当re模块中的函数,找到匹配项的时候,返回MatchObject对象。这些对象包括匹配模式的子字符串的信息。它们还包含录哪个模式匹配了子字符串那部分的信息,这些部分就是不同的“组”。

        组就是放在圆括号内的子模式。组的序号取决于在它的左侧的括号的数量,组0就是整个模式,例:       

'Django (is a( nice web)) (framework).'包含以下几个模式:0 Django is a nice web framework.1 is a nice web2 nice web3 framework>>> pat = re.compile(r'Django (is a (nice web)) (framework)')>>> m = pat.match("Django is a nice web framework")>>> m<_sre.SRE_Match object; span=(0, 30), match='Django is a nice web framework'>>>> m.groups()('is a nice web', 'nice web', 'framework')>>> m.group(0)'Django is a nice web framework'>>> m.group(1)'is a nice web'>>> m.group(2)'nice web'>>> m.group(3)'framework'>>> m.group(4)Traceback (most recent call last):  File "", line 1, in 
m.group(4)IndexError: no such group

二、正则表达式sub方法。

    sub是模块函数也是re对象的方法。

   模块函数原型:re.sub(pattern, repl, string, count=0, flags=0)

   类方法原型: regex.sub(repl, string, count=0)

    repl可以是函数可以是字符串。

    1、repl为字符串

import retext = "hello! {name},{name},{name}"pat2 = re.compile(r"{name}")bar = pat2.sub("xiao", text)print(bar)➜  python3 python3 re_test.pyhello! xiao,xiao,xiao

    2、repel在字符串中使用反向引用(反斜杠替换)(Backreferences):   

import repat3 = re.compile(r"{(.+)}")foo = pat3.sub(r"\1", "{title}")print(foo)➜  python3 python3 re_test.pytitle

    其中repel中的"\1"是反向引用group 1的内容。这里测试以下不能使用"\0",使用会返回一个空值,暂时我给不出很好的解释,回头填这个坑。

    3、repel为函数的时候,repel的函数回获取一个MatchObjects作为其参数。

import redef foo(arg):            return str(arg.groups())pat3 = re.compile(r"{(.+)}")bar = pat3.sub(foo, "{title}")print(bar)➜  python3 python3 re_test.py('title',)

三、正则匹配对象MatchObjects

    这里只记一个方法match.groupdict.

    可以用字字符串为没有组命名。命名方式是:       

    (?P<name>mode)

    这样这个这子模式就被命名为name,django中使用正则来匹配url,这个中给子模式命名方式会使用到,很方便。

import re pat4 = re.compile(r"

(?P

.+)

")m = pat4.search("

My first paragraph.

")print(m.groupdict())➜ re_blog git:(master) ✗ python3 re_test.py{'text': 'My first paragraph.'}

    

    

        

 

        

转载于:https://my.oschina.net/u/2255341/blog/851624

你可能感兴趣的文章
签名问题
查看>>
软件开发各阶段交付物列表
查看>>
2018-05-24 Linux学习
查看>>
Oracle数据库之SQL语句练习
查看>>
ntp服务器的搭建
查看>>
我的友情链接
查看>>
sysstat 安装
查看>>
《你必须知道的.NET》 - 书摘精要
查看>>
六、nginx搭建织梦DedeCms网站
查看>>
Tair学习小记
查看>>
网卡绑定(服务器&&交换机),缓存服务器Squid架构配置
查看>>
web网站加速之CDN(Content Delivery Network)技术原理
查看>>
Redis 数据结构-字符串源码分析
查看>>
打算写一款框架来提高自己 写个结构吧
查看>>
这世界就是,一些人总在昼夜不停地运转,而另外一些人,起床就发现世界已经变了。...
查看>>
网页设置
查看>>
Ubuntu 操作系统操作
查看>>
vue学习:10、第一个项目,实践中遇到的问题
查看>>
Linux下修改Mysql的用户(root)的密码
查看>>
sed的基本用法
查看>>