re模块中常用功能函数

一、加载模块  

import re

二、编译正则表达式

re.compile(pat, flags = 0) #把一个正则表达式pat编译成正则对象并返回,以便可以用正则对象的match和search等方法。

pat 编译时,正则表达式字符串

flags 编译标志位,用于修改正则表达式的匹配方式,如:是否区分大小写,多行匹配等。常用的flags有:

re.I
re.IGNORECASE让正则表达式忽略大小写,这样一来,[A-Z]也可以匹配小写字母了。此特性和locale无关。
re.L
re.LOCALE
让\w、\W、\b、\B、\s和\S依赖当前的locale。
re.M
re.MULTILINE
影响'^'和'$'的行为,指定了以后,'^'会增加匹配每行的开始(也就是换行符后的位置);'$'会增加匹配每行的结束(也就是换行符前的位置)。
re.S
re.DOTALL
影响'.'的行为,平时'.'匹配除换行符以外的所有字符,指定了本标志以后,也可以匹配换行符。
re.U
re.UNICODE
让\w、\W、\b、\B、\d、\D、\s和\S依赖Unicode库。
re.X
re.VERBOSE
运用这个标志,你可以写出可读性更好的正则表达式:除了在方括号内的和被反斜杠转义的以外的所有空白字符,都将被忽略,而且每行中,一个正常的井号后的所有字符也被忽略,这样就可以方便地在正则表达式内部写注释了。

a = re.compile(r"""\d +  # the integral part\.    # the decimal point\d *  # some fractional digits""", re.X)
b = re.compile(r"\d+\.\d*")
re.search(pattern, string[, flags])

三、搜索,执行功能函数

1、贪婪与非贪婪搜索

  *','+'和'?'(*?, +?, ??, {m,n}?)都是贪婪的,匹配尽可能多的模式字符串;可以在后面加个问号,将贪婪改为非贪婪,只匹配尽量少的模式字符串。

2、匹配分组:(...)

  匹配圆括号里的RE匹配的内容,并指定组的开始和结束位置。组里面的内容可以被提取(0代表所有匹配内容,n代表第n个分组匹配内容),也可以采用\number这样的特殊序列,被用于后续的匹配。要匹配字面意义上的'('和')',可以用反斜杆转义:\(、\),或是包含在反括号内:[(]、[)]。

3、搜索匹配

3.1 re.match和re.search

  re.match(pat, string[, flags = 0])

  如果字符串string的开头和正则表达式pat匹配的话,返回一个相应的MatchObject的实例,否则返回None

  re.search(pat, string[, flags = 0])

  在字符串内查找模式匹配(不一定是string开头),只要找到第一个匹配就返回一个相应的MatchObject的实例,否则返回None。

  注:MatchObject对象有以下方法:

  1⃣️m.group() 不加参数,返回re整体匹配的字符串;

  2⃣️m.group(n, m) 返回一个或多个子组。如果参数为一个,就返回一个子串;如果参数有多个,就返回多个子串注册的元组。如果不传任何参数,效果和传入一个0一样,将返回整个匹配。如果某个groupN未匹配到,相应位置会返回None。如果某个groupN是负数或者大于group的总数,则会抛出IndexError异常。

  3⃣️m.start([group])和m.end([group]) 返回的是被组group匹配到的子串在原字符串中的位置。如果不指定group或group指定为0,则代表整个匹配。如果group未匹配到,则返回 -1。

    对于指定的m和g,m.group(g)和m.string[m.start(g):m.end(g)]等效。
    如果group匹配到空字符串,m.start(group)和m.end(group)将相等。

  4⃣️m.span([group]) 返回一个元组,包含匹配 (开始,结束) 的位置

  5⃣️m.groups() 返回一个包含正则表达式中所有小组字符串的元组,从 1 到所含的小组号,通常groups()不需要参数,返回一个元组,元组中的元就是正则表达式中定义的组。

3.2 re.findall(pat, string, flags = 0)

  遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表。

import re
tt = "Tina is a good girl, she is cool, clever, and so on..."
rr = re.compile(r'\w*oo\w*')
print(rr.findall(tt))
print(re.findall(r'(\w)*oo(\w)',tt))#()表示子表达式
执行结果如下:
['good', 'cool']
[('g', 'd'), ('c', 'l')]

3.3 re.finditer(pat, string, flags = 0)

  搜索string,返回一个顺序访问每一个匹配结果(Match对象)的迭代器。找到 RE 匹配的所有子串,并把它们作为一个迭代器返回。

iter = re.finditer(r'\d+','12 drumm44ers drumming, 11 ... 10 ...')
for i in iter:print(i)print(i.group())print(i.span())
执行结果如下:
<_sre.SRE_Match object; span=(0, 2), match='12'>
(0, 2)
<_sre.SRE_Match object; span=(8, 10), match='44'>
(8, 10)
<_sre.SRE_Match object; span=(24, 26), match='11'>
(24, 26)
<_sre.SRE_Match object; span=(31, 33), match='10'>
(31, 33)

3.4 re.split(pat, string[, maxsplit])

  按照能够匹配的子串将string分割后返回列表。可以使用re.split来分割字符串,如:re.split(r'\s+', text);将字符串按空格分割成一个单词列表。maxsplit用于指定最大分割次数,不指定将全部分割。

3.5 re.sub(pat, repl, string[, count])

  将string里,匹配pat的部分,用repl替换掉,最多替换count次(剩余的匹配将不做处理),然后返回替换后的字符串。如果string里没有可以匹配pattern的串,将被原封不动地返回。repl可以是一个字符串,也可以是一个函数。

  如果repl是个函数,每次pattern被匹配到的时候,都会被调用一次,传入一个匹配到的MatchObject对象,需要返回一个字符串,在匹配到的位置,就填入返回的字符串。

>>> def dashrepl(matchobj):
...     if matchobj.group(0) == '-': return ' '
...     else: return '-'
>>> re.sub('-{1,2}', dashrepl, 'pro----gram-files')
'pro--gram files'

  re.subn(pattern, repl, string[, count]) 跟上面的sub()函数一样,只是它返回的是一个元组 (新字符串, 匹配到的次数)

转载于:https://www.cnblogs.com/xiaofeiIDO/p/7645696.html

python之re模块相关推荐

  1. python:Json模块dumps、loads、dump、load介绍

    20210831 https://www.cnblogs.com/bigtreei/p/10466518.html json dump dumps 区别 python:Json模块dumps.load ...

  2. 能带曲线图绘制python_如何使用python的matplotlib模块画折线图

    python是个很有趣的语言,可以在cmd命令窗口运行,还有很多的功能强大的模块.这篇经验告诉你,如何利用python的matplotlib模块画图. 工具/原料 windows系统电脑一台 pyth ...

  3. python之路——模块和包

    一.模块 1.什么是模块? 常见的场景:一个模块就是一个包含了Python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1.使用Python编 ...

  4. Python multiprocess 多进程模块

    转发:http://www.langzi.fun/Python multiprocess 多进程模块.html 需要注意的是,如果使用多线程,用法一定要加上if __name__=='__main__ ...

  5. Python 安装 xlsx模块

    为什么80%的码农都做不了架构师?>>>    Python 安装 xlsx模块 很多时候自动化测试时测试用例是写在excel中的如何读取转换成字典是一个比较关键的问题,使用pip命 ...

  6. python时间处理模块 datetime time模块 deltetime模块

    1 首先介绍time模块,因为简单 python 自带模块 本人使用time模块,只使用两个函数 time函数和sleep函数 import time a.     time.time()   函数 ...

  7. python使用joblib模块保存和加载机器学模型

    python使用joblib模块保存和加载机器学模型 # 导入需要的包和库: # Import Required packages #-------------------------# Import ...

  8. python时间处理模块datetime+dateutil、numpy时间处理模块datetime64以及pandas时间处理模块Timestamp的演化路径及常用处理接口

    python时间处理模块datetime+dateutil.numpy时间处理模块datetime64以及pandas时间处理模块Timestamp及常用处理接口 python时间处理模块dateti ...

  9. Python之glob模块进行文件匹配及遍历

    Python之glob模块进行文件匹配及遍历 glob是python自带的一个操作文件的相关模块,用来查找符合特定规则的文件路径,是python处理文件路径相关问题中常用的包. glob 文件名模式匹 ...

  10. Python使用re模块进行正则匹配日期和时间

    Python使用re模块进行正则匹配日期和时间 目录 Python使用re模块进行正则匹配日期和时间 日期匹配 时间匹配 日期匹配 #导入需要的正则匹配的re包 # Load regex packag ...

最新文章

  1. 网络流24题-飞行员配对方案问题
  2. Unity从头开始开发增强现实(AR)游戏学习教程
  3. 做科研发论文一直找不到研究热点?硕博导师都在关注的平台你还不快来?
  4. 【算法】论平衡二叉树(AVL)的正确种植方法
  5. 如何写Java文档注释(Java Doc Comments)
  6. 计算机网络拓扑结构方案总结,计算机网络拓扑结构总结
  7. FIT 2019 | 安全人员面临的机遇与挑战
  8. 利用老毛桃启动盘制作三合一系统启动:WINPE + CDlinux + Ubuntu
  9. 用递归法计算从n个人中选择k个人的组合数
  10. 从零开始学习Android开发
  11. 性能与实用兼具 Parallels Desktop 13 for Mac全球首发
  12. Quantum Espresso安装
  13. “洋葱狗”潜伏3年终曝光,定期偷袭能源及交通行业
  14. 麻省理工学院赵明民:能穿墙透视的计算机视觉
  15. 从未谋面只闻其名——缅怀张孝祥老师!
  16. 基于心电芯片 KS1081的微小穿戴心电方案
  17. 网络平台做用户实名认证的好处
  18. 用户标签体系的设计和效果评估
  19. mysql源生插入数据_php+mysql源生连接数据库和增删改查数据
  20. Python实现二重积分计算

热门文章

  1. Windows上python开发--2安装django框架
  2. 「小程序JAVA实战」小程序头像图片上传(下)(45)
  3. Python高级网络编程系列之第二篇
  4. 洛谷——P1044 栈
  5. Singleton设计模式
  6. nginx 403 forbidden 二种原因
  7. 机器学习(Part I)机器学习的种类
  8. phpcmsV9SQL注射+列目录
  9. MPLS学习一些问题(一)
  10. Duwamish深入剖析-配置篇