1.正则表达式的元字符有: . \ * + ?  ^ $ {} [ ]

. 匹配除换行符以外的任意字符

\ 转义字符,使后一个字符改变原来的意思

* 匹配前面字符0或多次

+ 匹配前面字符1或多次

?匹配一个字符0或多次

^ 匹配字符串开头

$ 匹配字符串结尾

{} {m}匹配前一个字符m次,{m,n}匹配前一个字符m至n次,若省略n,则匹配m至无限次

[] 字符集。对应的位置可以是字符集中任意字符。字符集中的字符可以逐个列出,也可以给出范围,如[abc]或[a-c].[^abc]表示取反,即非abc.

所有特殊字符在字符集中都失去其原有的特殊含义,用\反斜杠转义恢复特殊字符的特殊含义

() 被括起来的表达式将作为分组,从表达式左边开始没遇到一个分组的左括号“(”,编号+1.
分组表达式作为一个整体,可以后接数量词。表达式中的|仅在该组中有效。

这里需要强调一下反斜杠的作用:

反斜杠后面跟元字符去除特殊功能(即将特殊字符转义成普通字符)

反斜杠后面跟普通字符实现特殊功能 (即预定义字符)

引用序号对应的字组所匹配的字符串

a=re.search(r'(tina)(fei)haha\2','tinafeihahafei tinafeihahatina').group()
print(a)
结果:
tinafeihahafei

2.预定义字符集:

\d: 表示数字0-9

\D:非数字

\s:匹配任何空白字符[<空格>\t\r\n\f\v]

\S:非空的字符

\w:匹配包括下划线的任何字符[a-zA-Z0-9_]

\W:匹配非字母字符,即匹配特殊字符

\A:匹配字符开头,同^

\z:匹配字符结尾,同$

\b:匹配单词边界匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。

\B:和\b相反

这里需要强调一下\b的单词边界的理解:
w = re.findall('\btina','tian tinaaaa')
print(w)
s = re.findall(r'\btina','tian tinaaaa')
print(s)
v = re.findall(r'\btina','tian#tinaaaa')
print(v)
a = re.findall(r'\btina\b','tian#tina@aaa')
print(a)
执行结果如下:
[]
['tina']
['tina']
['tina']

三.re模块中常用功能函数

1.compile()

编译正则表达式模式,返回一个对象的模式。(可以把那些常用的正则表达式编译成正则表达式对象,这样可以提高一点效率。)

格式:

re.compile(pattern,flags=0)

pattern: 编译时用的表达式字符串。

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

标志
含义
re.S(DOTALL)
使.匹配包括换行在内的所有字符
re.I(IGNORECASE)
使匹配对大小写不敏感
re.L(LOCALE)
做本地化识别(locale-aware)匹配,法语等
re.M(MULTILINE)
多行匹配,影响^和$
re.X(VERBOSE)
该标志通过给予更灵活的格式以便将正则表达式写得更易于理解
re.U
根据Unicode字符集解析字符,这个标志影响\w,\W,\b,\B
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))   #查找所有包含'oo'的单词
执行结果如下:
['good', 'cool']

2、match()

决定RE是否在字符串刚开始的位置匹配。//注:这个方法并不是完全匹配。当pattern结束时若string还有剩余字符,仍然视为成功。想要完全匹配,可以在表达式末尾加上边界匹配符'$'

格式:

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

print(re.match('com','comwww.runcomoob').group())
print(re.match('com','Comwww.runcomoob',re.I).group())
执行结果如下:
com
com

3、search()

格式:

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

re.search函数会在字符串内查找模式匹配,只要找到第一个匹配然后返回,如果字符串没有匹配,则返回None

print(re.search('\dcom','www.4comrunoob.5com').group())
执行结果如下:
4com

*注:match和search一旦匹配成功,就是一个match object对象,而match object对象有以下方法:

  • group() 返回被 RE 匹配的字符串
  • start() 返回匹配开始的位置
  • end() 返回匹配结束的位置
  • span() 返回一个元组包含匹配 (开始,结束) 的位置
  • group() 返回re整体匹配的字符串,可以一次输入多个组号,对应组号匹配的字符串。

a. group()返回re整体匹配的字符串,
b. group (n,m) 返回组号为n,m所匹配的字符串,如果组号不存在,则返回indexError异常
c.groups()groups() 方法返回一个包含正则表达式中所有小组字符串的元组,从 1 到所含的小组号,通常groups()不需要参数,返回一个元组,元组中的元就是正则表达式中定义的组。

import re
a = "123abc456"print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0))   #123abc456,返回整体print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1))   #123print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2))   #abcprint(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3))   #456
###group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分,group(3) 列出第三个括号匹配部分。###

4、findall()

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

格式:

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

p = re.compile(r'\d+')
print(p.findall('o1n2m3k4'))
执行结果如下:
['1', '2', '3', '4']

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')]

5、finditer()

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

格式:

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

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'>
12
(0, 2)
<_sre.SRE_Match object; span=(8, 10), match='44'>
44
(8, 10)
<_sre.SRE_Match object; span=(24, 26), match='11'>
11
(24, 26)
<_sre.SRE_Match object; span=(31, 33), match='10'>
10
(31, 33)

6、split()

按照能够匹配的子串将string分割后返回列表。

可以使用re.split来分割字符串,如:re.split(r'\s+', text);将字符串按空格分割成一个单词列表。

格式:

re.split(pattern, string[, maxsplit])

maxsplit用于指定最大分割次数,不指定将全部分割

print(re.split('\d+','one1two2three3four4five5'))
执行结果如下:
['one', 'two', 'three', 'four', 'five', '']

print(re.split('\d+','one1two2three3four4five5'))
执行结果如下:
['one', 'two', 'three', 'four', 'five', '']

转载于:https://www.cnblogs.com/qinyanli/p/8315442.html

python --- re模块相关推荐

  1. Python Re 模块超全解读!详细

    内行必看!Python Re 模块超全解读! 2019.08.08 18:59:45字数 953阅读 121 re模块下的函数 compile(pattern):创建模式对象 > import ...

  2. python argparse模块_Python argparse模块应用实例解析

    这篇文章主要介绍了Python argparse模块应用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 简介 argparse是python ...

  3. 关于使用python logging模块的几点总结

    关于使用python logging模块的几点总结 使用python的标准日志模块logging可以非常方便地记录日志.Python日志系统非常丰富.添加结构化或非结构化日志输出到python代码,写 ...

  4. python高级-模块(14)

    一.python中的模块 有过C语言编程经验的朋友都知道在C语言中如果要引用sqrt函数,必须用语句#include <math.h>引入math.h这个头文件,否则是无法正常进行调用的. ...

  5. 转载: Python os 模块的功能以及子函数介绍

    原文链接: python之os模块 - 程序生(Codey) - 博客园 https://www.cnblogs.com/cxscode/p/8085326.html 一.Python OS模块介绍 ...

  6. 简单介绍python process模块

    在python中大部分情况需要使用多进程,python提供了multiprocessing模块.multiprocessing模块的功能众多:支持子进程.通信和共享数据.执行不同形式的同步,提供了Pr ...

  7. python io模块_python中的StringIO模块

    原博文 2015-10-23 15:21 − # python中的StringIO模块 标签:python StringIO --- > 此模块主要用于在内存缓冲区中读写数据.模块是用类编写的, ...

  8. python正则表达式需要模块_使用Python正则表达式模块,让操作更加简单

    处理文本数据的一个主要任务就是创建许多以文本为基础的特性. 人们可能想要在文本中找出特定格式的内容,比如找出存在于文本中的电子邮件,或者大型文本中的电话号码. 虽然想要实现上述功能听起来很繁琐,但是如 ...

  9. python导入模块有同名_Python:导入与函数同名的模块

    背景:第一次在SE上提问.我在 Python方面还很陌生,而且在编程方面也不是很有经验.我已经四处寻找,但我没有找到这个问题的答案,我非常感谢你的帮助. 我的问题是:如何导入与函数同名的模块? 具体来 ...

  10. python第三方模块—psutil模块

    系统基础信息采集模块作为监控模块的重要组成部分,能够帮助运维人员了解当前系统的健康程度,同时也是衡量业务的服务质量的依据,比如系统资源吃紧,会直接影响业务的服务质量及用户体验,另外获取设备的流量信息, ...

最新文章

  1. Makefile for OpenCV
  2. java简单通讯录的实现02person类_Java自定义类加载器实现不同版本的类加载
  3. android 中开启线程的方法,android中开启的循环线程
  4. python语句大全input_input提示文字 Python基础输入函数,if-else语句,if-elif
  5. linux 编译安装python,linux下编译安装python2.7.6
  6. Kubernetes-Service服务(十一)
  7. 时间序列分析中的增长率——同比与环比
  8. 【托业】【新托业TOEIC新题型真题】学习笔记10-题库七-P7
  9. java 打印对象大小_如何获取一个Java对象所占内存大小
  10. win10如何还原计算机名,win10电脑一键还原教程
  11. 最新彩虹Ds网5.8PJ版网站源码
  12. SSM毕设项目宠物医院预约管理系统wjz80(java+VUE+Mybatis+Maven+Mysql)
  13. Understanding C/C++ Strict Aliasing
  14. 图片另存为原来有快捷键!
  15. 在线翻译html网页,HTML网页到维基页面翻译器
  16. RCNN原文理解与代码分析
  17. 【工具推荐】Adobe Reader看PDF文件点击链接跳转,返回原位置方法
  18. 如何使用智能默认值来减少认知负担
  19. 自来水厂计算机专业笔试题,注册给排水基础考试真题.docx
  20. [AHK]WinAutoHide – 让窗口贴边隐藏

热门文章

  1. [转]讲解安装Ubuntu nfs配置系统
  2. 120xa正反转参数_RFID的软件SOPAS参数设置
  3. 图:BFS(深度优先搜索)图解分析代码实现
  4. JAVA爬虫https_java爬虫问题一:解决使用htmlunit 时候ssl认证失败问题
  5. 如何为云原生应用带来稳定高效的部署能力?
  6. python包导入细节_python循环导入是一个实现细节吗?
  7. KDD_CUP99数据集处理和测试(已处理数据可下载)
  8. c语言得到系统的函数,c语言系统函数(C language system function).doc
  9. python2.x和3.x为什么不兼容_Python中使用AES算法(解决Python2.x和3.x下运行不兼容问题)...
  10. 爬虫单个ip代理设置_爬虫怎样设置代理ip池