正则是处理字符串最常用的方法,我们编码中到处可见正则的身影。

正则大同小异,python 中的正则跟其他语言相比略有差异:

1、替换字符串时,替换的字符串可以是一个函数

2、split 函数可以指定分割次数,这会导致有个坑

3、前项界定的表达式必须定长

下面详细描述下 re 模块的使用方法,其实,注意上面提到的三点差异就好

1、match

说明:

re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回 None。

语法:

re.match(pattern, string, flags=0)

flags为可选标识,多个标识可以通过按位或 (|) 来指定。如 re.I | re.M 被设置成 I 和 M 标识:

修饰符

描述

re.I

使匹配对大小写不敏感

re.L

做本地化识别(locale-aware)匹配

re.M

多行匹配,影响 ^ 和 $

re.S

使 . 匹配包括换行在内的所有字符

re.U

根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.

re.X

该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

匹配成功re.match方法返回一个匹配的对象,可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。group() 或 group(0),返回整个正则表达式的匹配结果。

举例:

s= 'abc123abc'

print(re.match('[a-z]+', s))           # <_sre.sre_match object span="(0," match="abc">

print(re.match('[a-z]+', s).group(0))      # abc

print(re.match('[\d]+', s))            # None

print(re.match('[A-Z]+', s, re.I).group(0))   # abc

print(re.match('[a-z]+', s).span())       # (0, 3)

2、search

说明:

re.search 扫描整个字符串并返回第一个成功的匹配。

语法:

re.search(pattern, string, flags=0)

匹配成功re.search方法返回一个匹配的对象,否则返回None。可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

s = 'abc123abc'

print(re.search('[a-z]+', s).group())  # abc

print(re.search('[a-z]+', s).span())   # (0, 3)

print(re.search('[\d]+', s).group())   # 123

print(re.search('[\d]+', s).span())   # (3, 6)

print(re.search('xyz', s))         # None

groupdict

groupdict 返回匹配到的所有命名子组的字典。

print(re.search('[a-z]+', s).groupdict()) # {}

print(re.search('(?P[a-z]+)(?P\d+)', s).groupdict()) # {'num': '123', 'letter': 'abc'}

3、sub 和 subn

说明:

re.sub用于替换字符串中的匹配项。

re.subn返回一个元组,包含替换后的字符串及替换次数。

语法:

sub(pattern, repl, string, count=0, flags=0)

repl: 替换的字符串,也可为一个函数。

count: 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。

举例:

s = 'abc123abc'

print(re.sub('[\d]+', '数字', s)) # abc数字abc

print(re.sub('[a-z]+', '字母', s, 1)) # 字母123abc

# 将匹配的数字乘以 2

def double(matched):

value = int(matched.group('value'))

return str(value * 2)

# repl是一个函数

print(re.sub('(?P\d+)', double, s))  # abc246abc

print(re.subn('[\d]+', '数字', s))       # ('abc数字abc', 1)

print(re.subn('[a-z]+', '字母', s,))      # ('字母123字母', 2)

print(re.subn('[a-z]+', '字母', s, 1))     # ('字母123字母', 1)

4、compile

说明:

re.compile 用于编译正则表达式,生成一个正则表达式(Pattern)对象,供 match() 和 search() 这两个函数使用。

语法:

compile(pattern, flags=0)

举例:

s = 'abc123abc'

p = re.compile('[\d]+')

print(p.match(s, 4, 5).group(0)) # 2 从位置4开始匹配到位置5

print(p.search(s).group(0)) # 123

5、findall

说明:

re.findall 在字符串中查找正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。

语法:

findall(pattern, string, flags=0)

举例:

s = 'abc123abc'

print(re.findall('[a-z]+', s)) # ['abc', 'abc']

print(re.findall('[h-n]+', s)) # []

6、finditer

说明:

finditer和 findall 类似,在字符串中查找正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。

语法:

finditer(pattern, string, flags=0)

举例:

s = 'abc123def'

it = re.finditer('[a-z]+', s)

for match in it:

print(match.group())

7、split

说明:

re.split 方法按照能够匹配的子串将字符串分割后返回列表。

语法:

split(pattern, string, maxsplit=0, flags=0)

maxsplit:分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数。

举例:

print(re.split('a', '1A1a2A3', re.I)) # ['1A1', '2A3']

# 输出结果并未能区分大小写,这是因为re.split(pattern,string,maxsplit, flags)默认是四个参数,当我们传入的三个参数的时候,系统会默认re.I是第三个参数,所以就没起作用。

# 如果想让这里的re.I起作用,写成flags=re.I即可。

print(re.split('a', '1A1a2A3', flags=re.I)) # ['1', '1', '2', '3']

8、escape

说明:

re.escape对字符串里面的特殊字符串进行转义。

语法:

escape(pattern)

举例:

print(re.escape('www.dxy.cn')) # www\.dxy\.cn

9、正则

“(?P…)”:分组,并将其命名为。

“(?P=name)”:引用别名为的分组匹配到的串。

10、前项(否定)界定中的特殊

正则中常用的前项界定(?<=exp)和前项否定界定(?

(?<=aaa)   # 正确

(?<=aaa|bbb) # 正确

(?<=aaa|bb) # 错误

(?<=\d+)   # 错误

(?<=\d{3})  # 正确

以上所述是小编给大家介绍的Python正则表达式re模块详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对聚米学院网站的支持!

python中re模块的span,详解Python正则表达式re模块相关推荐

  1. python中pandas安装视频教程_详解Python中pandas的安装操作说明(傻瓜版)

    很多人来问我pandas的安装(python数据分析里面的必修课) 步骤如下: 安装python的时候,把路径加到系统里,这样,随时可以用pip 路径添加方法: 查找路径: 路径1: 2.例如: 即: ...

  2. python中break怎么用_详解Python中break语句的用法

    详解Python中break语句的用法 在Python中的break语句终止当前循环,继续执行下一个语句,就像C语言中的break一样. break最常见的用途是当一些外部条件被触发,需要从一个循环中 ...

  3. [转载] python中for语句用法_详解Python中for循环的使用_python

    参考链接: 在Python中将else条件语句与for循环一起使用 这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 &q ...

  4. python中for语句用法_详解Python中for循环的使用_python

    这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 "探索 Python,第 5 部分:用 Python 编程&q ...

  5. python中的p dml sel_详解 Python 操作 PPT 的各种骚操作!

    1.python-pptx模块简介 使用python操作PPT,需要使用的模块就是python-pptx,下面来对该模块做一个简单的介绍. 这里提前做一个说明:python操作PPT,最好是我们提前设 ...

  6. python中break的作用_详解Python中break语句的用法

    在Python中的break语句终止当前循环,继续执行下一个语句,就像C语言中的break一样. break最常见的用途是当一些外部条件被触发,需要从一个循环中断退出. break语句可以在while ...

  7. python中str.format用法_详解Python中的str.format方法

    字符串的内置方法大致有40来个,但是一些常用的其实就那么20几个,而且里面还有类似的用法,区分度高比如:isalpha,isalnum,isdigit,还有一些无时不刻都会用到的split切分,joi ...

  8. python中的subprocess.Popen()使用详解---以及注意的问题(死锁)

    从python2.4版本开始,可以用subprocess这个模块来产生子进程,并连接到子进程的标准输入/输出/错误中去,还可以得到子进程的返回值. subprocess意在替代其他几个老的模块或者函数 ...

  9. python平方数迭代器_对python中的高效迭代器函数详解

    python中内置的库中有个itertools,可以满足我们在编程中绝大多数需要迭代的场合,当然也可以自己造轮子,但是有现成的好用的轮子不妨也学习一下,看哪个用的顺手~ 首先还是要先import一下: ...

最新文章

  1. 2021年大数据常用语言Scala(十六):基础语法学习 列表 List 重点掌握
  2. 自定义ClassLoader实现java应用核心逻辑模块热部署
  3. 在springboot中使用easyexcel导出数据excel表格
  4. SQL:认识数据库约束
  5. 计算机活动宣传稿,畅想科技,创造梦想 ——东华大学计算机科学与技术学院第十一届图灵科技文化节通讯稿...
  6. 华为服务器默认什么系统,云服务器默认系统
  7. 提交辞职申请时,领导极力挽留,还答应加薪,要不要留下来?
  8. 最新数据库驱动包下载(完整版)
  9. VBA 中Dim含义
  10. js 前端实现打印功能
  11. 大数据应用场景”之隔壁老王(连载二)
  12. 12个免费在线Logo生成器
  13. 神经系统的组成结构图谱,神经系统的基本结构图
  14. Box plot (箱形图) 中 quartile (四分位数)原理,及python_matplotlib中Q1和Q3定义的不同
  15. 硕士研究生毕业计算机水平,计算机硕士毕业论文答辩自述
  16. Learning Shape Representations for Clothing Variations in Person Re-Identification
  17. Linux磁盘分区并永久挂载
  18. python代码加密运行_python源码下载后怎样进行加密
  19. 心灵震撼《一个8岁女孩的遗书》
  20. 解决安卓android加载https页面不能正常显示问题

热门文章

  1. Node.js monly图片批量下载爬虫1.00
  2. 软件架构之 23种设计模式
  3. 北京积分落户三年分析(2018-2020)
  4. mac + iterm + 远程开发 快捷键和工具--戴上手套搬砖
  5. java 实现用户每天一次签到功能
  6. 警惕免杀版Gh0st木马!
  7. 至广大斗图群众,发现神器一枚,海量斗图直接搜
  8. PDF如何编辑,怎样删除PDF页眉页脚
  9. 学习操作系统,看这一篇就够了!
  10. ffmpeg java 播放视频_Javacv使用ffmpeg实现音视频同步播放