文章目录

  • 引言
  • 1.re.match函数
  • 2. re.search方法
  • 3.re.match与re.search的区别
  • 4.re.sub
  • 5.re.compile 函数
  • 6.re.findall
  • 7.re.finditer
  • 8.re.split

引言

re 模块使 Python 语言拥有全部的正则表达式功能

使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

  1. group(num=0) 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
  2. groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。

1.re.match函数

描述

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

语法

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

参数

pattern : 匹配的正则表达式
string : 要匹配的字符串
flags : 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配

  1. re.I 忽略大小写
  2. re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
  3. re.M 多行模式
  4. re.S 即为’ . ‘并且包括换行符在内的任意字符(’ . '不包括换行符)
  5. re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
  6. re.X 为了增加可读性,忽略空格和’ # '后面的注释

返回

匹配成功re.match方法返回一个匹配的对象,否则返回None。

实例

import re
print(re.match('www', 'www.baidu.com').span())  # 在起始位置匹配
print(re.match('com', 'www.baidu.com'))         # 不在起始位置匹配
(0, 3)
None
line = "Cats are smarter than dogs"
# .* 表示任意匹配除换行符(\n、\r)之外的任何单个或多个字符
# (.*?) 表示"非贪婪"模式,只保存第一个匹配到的子串
matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)if matchObj:print ("matchObj.group() : ", matchObj.group())print ("matchObj.group(1) : ", matchObj.group(1))print ("matchObj.group(2) : ", matchObj.group(2))
else:print ("No match!!")matchObj.group() :  Cats are smarter than dogs
matchObj.group(1) :  Cats
matchObj.group(2) :  smarter

2. re.search方法

描述

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

语法

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

参数

pattern : 匹配的正则表达式
string : 要匹配的字符串
flags : 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配

  1. re.I 忽略大小写
  2. re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
  3. re.M 多行模式
  4. re.S 即为’ . ‘并且包括换行符在内的任意字符(’ . '不包括换行符)
  5. re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
  6. re.X 为了增加可读性,忽略空格和’ # '后面的注释

返回值

匹配成功re.search方法返回一个匹配的对象,否则返回None

实例

import reprint(re.search('www', 'www.runoob.com').span())  # 在起始位置匹配
print(re.search('com', 'www.runoob.com').span())         # 不在起始位置匹配(0, 3)
(11, 14)
import res = 'A23G4HFD567'# (?P<value>\d+)分组匹配,表示命名一个value的组,匹配规则是匹配一个到多个数字
res = re.search('(?P<value>\d+)', s)
print(res.groupdict())
{'value': '23'}
import reline = "Cats are smarter than dogs"searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)if searchObj:print ("searchObj.group() : ", searchObj.group())print ("searchObj.group(1) : ", searchObj.group(1))print ("searchObj.group(2) : ", searchObj.group(2))
else:print ("Nothing found!!")searchObj.group() :  Cats are smarter than dogs
searchObj.group(1) :  Cats
searchObj.group(2) :  smarter

3.re.match与re.search的区别

描述

re.match 只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回 None,而 re.search 匹配整个字符串,直到找到一个匹配

import reline = "Cats are smarter than dogs"matchObj = re.match( r'dogs', line, re.M|re.I)
if matchObj:print ("match --> matchObj.group() : ", matchObj.group())
else:print ("No match!!")matchObj = re.search( r'dogs', line, re.M|re.I)
if matchObj:print ("search --> matchObj.group() : ", matchObj.group())
else:print ("No match!!")No match!!
search --> matchObj.group() :  dogs

4.re.sub

描述

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

语法

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

参数

前三个为必选参数,后两个为可选参数。
pattern : 正则中的模式字符串。
repl : 替换的字符串,也可为一个函数。
string : 要被查找替换的原始字符串。
count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
flags : 编译时用的匹配模式,数字形式。

  1. re.I 忽略大小写
  2. re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
  3. re.M 多行模式
  4. re.S 即为’ . ‘并且包括换行符在内的任意字符(’ . '不包括换行符)
  5. re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
  6. re.X 为了增加可读性,忽略空格和’ # '后面的注释

实例

import rephone = "2004-959-559 # 这是一个电话号码"# 删除注释
# .*$ 表示从字符串末尾开始任意匹配除换行符(\n、\r)之外的任何单个或多个字符
# 将其替换为空格
num = re.sub(r'#.*$', "", phone)
print ("电话号码 : ", num)# 移除非数字的内容
# '\D'表示匹配任何非数字
num = re.sub(r'\D', "", phone)
print ("电话号码 : ", num)电话号码 :  2004-959-559
电话号码 :  2004959559

repl 参数是一个函数

import re# 将匹配的数字乘于 2
def double(matched):value = int(matched.group('value'))return str(value * 2)s = 'A23G4HFD567'
# (?P<value>\d+)表示命名一个名字为value的组,匹配规则符合后面的\d+
print(re.sub('(?P<value>\d+)', double, s))A46G8HFD1134

5.re.compile 函数

描述

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

语法

re.compile(pattern[, flags])

参数

pattern : 一个字符串形式的正则表达式
flags 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:

  1. re.I 忽略大小写
  2. re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
  3. re.M 多行模式
  4. re.S 即为’ . ‘并且包括换行符在内的任意字符(’ . '不包括换行符)
  5. re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
  6. re.X 为了增加可读性,忽略空格和’ # '后面的注释

实例

>>>import re
>>> pattern = re.compile(r'\d+')                    # 用于匹配至少一个数字
>>> m = pattern.match('one12twothree34four')        # 查找头部,没有匹配
>>> print( m )
None
>>> m = pattern.match('one12twothree34four', 2, 10) # 从'e'的位置开始匹配,没有匹配
>>> print( m )
None
>>> m = pattern.match('one12twothree34four', 3, 10) # 从'1'的位置开始匹配,正好匹配
>>> print( m )                                        # 返回一个 Match 对象
<_sre.SRE_Match object at 0x10a42aac0>
>>> m.group(0)   # 可省略 0
'12'
>>> m.start(0)   # 可省略 0
3
>>> m.end(0)     # 可省略 0
5
>>> m.span(0)    # 可省略 0
(3, 5)
>>>import re
>>> pattern = re.compile(r'([a-z]+) ([a-z]+)', re.I)   # re.I 表示忽略大小写
>>> m = pattern.match('Hello World Wide Web')
>>> print( m )                            # 匹配成功,返回一个 Match 对象
<_sre.SRE_Match object at 0x10bea83e8>
>>> m.group(0)                            # 返回匹配成功的整个子串
'Hello World'
>>> m.span(0)                             # 返回匹配成功的整个子串的索引
(0, 11)
>>> m.group(1)                            # 返回第一个分组匹配成功的子串
'Hello'
>>> m.span(1)                             # 返回第一个分组匹配成功的子串的索引
(0, 5)
>>> m.group(2)                            # 返回第二个分组匹配成功的子串
'World'
>>> m.span(2)                             # 返回第二个分组匹配成功的子串索引
(6, 11)
>>> m.groups()                            # 等价于 (m.group(1), m.group(2), ...)
('Hello', 'World')
>>> m.group(3)                            # 不存在第三个分组
Traceback (most recent call last):File "<stdin>", line 1, in <module>
IndexError: no such group

当匹配成功时返回一个 Match 对象,其中:

  1. group([group1, …]) 方法用于获得一个或多个分组匹配的字符串,当要获得整个匹配的子串时,可直接使用 group() 或 group(0);
  2. start([group]) 方法用于获取分组匹配的子串在整个字符串中的起始位置(子串第一个字符的索引),参数默认值为 0;
  3. end([group]) 方法用于获取分组匹配的子串在整个字符串中的结束位置(子串最后一个字符的索引+1),参数默认值为 0;
  4. span([group]) 方法返回 (start(group), end(group))。

6.re.findall

描述

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
注意: match 和 search 是匹配一次 findall 匹配所有

语法

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

pattern.findall(string[, pos[, endpos]])

参数

pattern 匹配模式。
string 待匹配的字符串。
pos 可选参数,指定字符串的起始位置,默认为 0。
endpos 可选参数,指定字符串的结束位置,默认为字符串的长度。

实例

import reresult1 = re.findall(r'\d+','runoob 123 google 456')pattern = re.compile(r'\d+')   # 查找数字
result2 = pattern.findall('runoob 123 google 456')
result3 = pattern.findall('run88oob123google456', 0, 10)print(result1)
print(result2)
print(result3)['123', '456']
['123', '456']
['88', '12']

7.re.finditer

描述

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

语法

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

参数

pattern 匹配模式。
string 待匹配的字符串。
flags 用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等

  1. re.I 忽略大小写
  2. re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
  3. re.M 多行模式
  4. re.S 即为’ . ‘并且包括换行符在内的任意字符(’ . '不包括换行符)
  5. re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
  6. re.X 为了增加可读性,忽略空格和’ # '后面的注释

实例

import reit = re.finditer(r"\d+","12a32bc43jf3")
for match in it: print (match.group() )
12
32
43
3

8.re.split

描述

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

语法

re.split(pattern, string[, maxsplit=0, flags=0])

参数

pattern 匹配模式。
string 待匹配的字符串。
maxsplit 分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数。
flags 用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等

  1. re.I 忽略大小写
  2. re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
  3. re.M 多行模式
  4. re.S 即为’ . ‘并且包括换行符在内的任意字符(’ . '不包括换行符)
  5. re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
  6. re.X 为了增加可读性,忽略空格和’ # '后面的注释

实例

>>>import re
>>> re.split('\W+', 'runoob, runoob, runoob.')
['runoob', 'runoob', 'runoob', '']
>>> re.split('(\W+)', ' runoob, runoob, runoob.')
['', ' ', 'runoob', ', ', 'runoob', ', ', 'runoob', '.', '']
>>> re.split('\W+', ' runoob, runoob, runoob.', 1)
['', 'runoob, runoob, runoob.']>>> re.split('a*', 'hello world')   # 对于一个找不到匹配的字符串而言,split 不会对其作出分割
['hello world']

Python—常用正则表达式方法相关推荐

  1. [python] 常用正则表达式爬取网页信息及分析HTML标签总结

    这篇文章主要是介绍Python爬取网页信息时,经常使用的正则表达式及方法.它是一篇总结性文章,实用性比较大,主要解决自己遇到的爬虫问题,也希望对你有所帮助~ 当然如果会Selenium基于自动化测试爬 ...

  2. Python 常用编程方法

    python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出,进 ...

  3. Python 常用魔法方法

    1.dict 无处不在的__dict__ 类的__dict__属性和类对象的__dict__属性 # -*- coding: utf-8 -*-class A(object):"" ...

  4. python常用字符串方法调用语法_Python3常用的字符串方法

    判断是否全是字母 "python".isalpha() # 返回True "2python".isalpha() # 返回False 根据分隔符分割字符串 a ...

  5. python常用正则表达式_Python3常用正则表达式

    正则表达式速查表 字符 描述 \ 将下一个字符标记为一个特殊字符.或一个原义字符.或一个向后引用.或一个八进制转义符.例如,"n"匹配字符"n"."\ ...

  6. python常用输入输出の方法

    获取用户输入: Python split()方法: #Python split()方法: """ 描述 Python split() 通过指定分隔符对字符串进行切片,如果 ...

  7. python常用魔术方法

    常见的魔方属性.方法 __doc__ 表示类的描述信息 __module__表示当前操作的对象在那个模块(main) __class__表`示当前操作的对象的类是什么 __new__ 创建对象时为对象 ...

  8. python常用校验方法总结

    1.校验一个字符串是否是合法IP地址 ipv4举例:利用正则表达式来匹配 def checkip(ip):p = re.compile('^((25[0-5]|2[0-4]\d|[01]?\d\d?) ...

  9. Python常用正则表达式总结

    1 非负整数:^\d+$ 2 3 正整数:^[0-9]*[1-9][0-9]*$ 4 5 非正整数:^((-\d+)|(0+))$ 6 7 负整数:^-[0-9]*[1-9][0-9]*$ 8 9 整 ...

  10. python常用类型转换の方法

    python实现字符和ascll转换 # 用户输入字符 c = input("请输入一个字符: ") # 用户输入ASCII码,并将输入的数字转为整型 a = int(input( ...

最新文章

  1. 洛谷-P1896 [SCOI2005]互不侵犯
  2. ubuntu安装numpy,matplotlib等
  3. 第6周第4课:复习及扩展知识
  4. Html 教程 (5) 表格标签
  5. 关于算法--蛮力法篇--选择排序
  6. 伪元素::selection -- CSS ::selection 伪元素,定义用户鼠标已选择内容的样式
  7. ADO 中 adLockPessimistic(悲观锁定)下面的陷阱
  8. 如何将pdf文件转换成可以编辑的文档
  9. Ubuntu 20.04 虚拟显示器 1080P 配置
  10. 物联网工程导论第二版答案选择题
  11. ENVI学习总结(十二)——基于改进的 CASA 模型反演 NPP
  12. 测试面试题集锦(一)| 软件测试常见必考问题与流程篇(附答案)
  13. Ubuntu系统shipyard安装
  14. mybatis中的事务------我的笔记M11
  15. Java程序员月薪达到三万,需要技术水平达到什么程度?(转)
  16. 微信支付账单修改数字
  17. 压缩视频的软件有哪些?最好用的视频压缩软件是哪款?
  18. IoU(Intersection over Union)
  19. 计算机高中期末总结作文,高中期末总结:高一期末总结作文
  20. python3计算长方形的周长和面积

热门文章

  1. 一起学习x86/x64知识(一)
  2. oracle笔记(2010-1-30)
  3. (dp)openjudge 复杂的整数划分问题
  4. VMware 12PRO安装Mac OS X 10.10.5
  5. ie 11 cookie 的值为空
  6. 多线程socket编程示例
  7. 修改sharepoint列表样式
  8. 福州大学 Problem 2169 shadow
  9. WinDbg / SOS Cheat Sheet
  10. Python项目开发公用方法--excel生成方法