Python—常用正则表达式方法
文章目录
- 引言
- 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() 匹配对象函数来获取匹配表达式。
- group(num=0) 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
- groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。
1.re.match函数
描述
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none
语法
re.match(pattern, string, flags=0)
参数
pattern : 匹配的正则表达式
string : 要匹配的字符串
flags : 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配
- re.I 忽略大小写
- re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
- re.M 多行模式
- re.S 即为’ . ‘并且包括换行符在内的任意字符(’ . '不包括换行符)
- re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
- 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 : 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配
- re.I 忽略大小写
- re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
- re.M 多行模式
- re.S 即为’ . ‘并且包括换行符在内的任意字符(’ . '不包括换行符)
- re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
- 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 : 编译时用的匹配模式,数字形式。
- re.I 忽略大小写
- re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
- re.M 多行模式
- re.S 即为’ . ‘并且包括换行符在内的任意字符(’ . '不包括换行符)
- re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
- 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 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:
- re.I 忽略大小写
- re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
- re.M 多行模式
- re.S 即为’ . ‘并且包括换行符在内的任意字符(’ . '不包括换行符)
- re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
- 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 对象,其中:
- group([group1, …]) 方法用于获得一个或多个分组匹配的字符串,当要获得整个匹配的子串时,可直接使用 group() 或 group(0);
- start([group]) 方法用于获取分组匹配的子串在整个字符串中的起始位置(子串第一个字符的索引),参数默认值为 0;
- end([group]) 方法用于获取分组匹配的子串在整个字符串中的结束位置(子串最后一个字符的索引+1),参数默认值为 0;
- 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 用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等
- re.I 忽略大小写
- re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
- re.M 多行模式
- re.S 即为’ . ‘并且包括换行符在内的任意字符(’ . '不包括换行符)
- re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
- 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 用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等
- re.I 忽略大小写
- re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
- re.M 多行模式
- re.S 即为’ . ‘并且包括换行符在内的任意字符(’ . '不包括换行符)
- re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
- 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—常用正则表达式方法相关推荐
- [python] 常用正则表达式爬取网页信息及分析HTML标签总结
这篇文章主要是介绍Python爬取网页信息时,经常使用的正则表达式及方法.它是一篇总结性文章,实用性比较大,主要解决自己遇到的爬虫问题,也希望对你有所帮助~ 当然如果会Selenium基于自动化测试爬 ...
- Python 常用编程方法
python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出,进 ...
- Python 常用魔法方法
1.dict 无处不在的__dict__ 类的__dict__属性和类对象的__dict__属性 # -*- coding: utf-8 -*-class A(object):"" ...
- python常用字符串方法调用语法_Python3常用的字符串方法
判断是否全是字母 "python".isalpha() # 返回True "2python".isalpha() # 返回False 根据分隔符分割字符串 a ...
- python常用正则表达式_Python3常用正则表达式
正则表达式速查表 字符 描述 \ 将下一个字符标记为一个特殊字符.或一个原义字符.或一个向后引用.或一个八进制转义符.例如,"n"匹配字符"n"."\ ...
- python常用输入输出の方法
获取用户输入: Python split()方法: #Python split()方法: """ 描述 Python split() 通过指定分隔符对字符串进行切片,如果 ...
- python常用魔术方法
常见的魔方属性.方法 __doc__ 表示类的描述信息 __module__表示当前操作的对象在那个模块(main) __class__表`示当前操作的对象的类是什么 __new__ 创建对象时为对象 ...
- python常用校验方法总结
1.校验一个字符串是否是合法IP地址 ipv4举例:利用正则表达式来匹配 def checkip(ip):p = re.compile('^((25[0-5]|2[0-4]\d|[01]?\d\d?) ...
- 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 整 ...
- python常用类型转换の方法
python实现字符和ascll转换 # 用户输入字符 c = input("请输入一个字符: ") # 用户输入ASCII码,并将输入的数字转为整型 a = int(input( ...
最新文章
- 洛谷-P1896 [SCOI2005]互不侵犯
- ubuntu安装numpy,matplotlib等
- 第6周第4课:复习及扩展知识
- Html 教程 (5) 表格标签
- 关于算法--蛮力法篇--选择排序
- 伪元素::selection -- CSS ::selection 伪元素,定义用户鼠标已选择内容的样式
- ADO 中 adLockPessimistic(悲观锁定)下面的陷阱
- 如何将pdf文件转换成可以编辑的文档
- Ubuntu 20.04 虚拟显示器 1080P 配置
- 物联网工程导论第二版答案选择题
- ENVI学习总结(十二)——基于改进的 CASA 模型反演 NPP
- 测试面试题集锦(一)| 软件测试常见必考问题与流程篇(附答案)
- Ubuntu系统shipyard安装
- mybatis中的事务------我的笔记M11
- Java程序员月薪达到三万,需要技术水平达到什么程度?(转)
- 微信支付账单修改数字
- 压缩视频的软件有哪些?最好用的视频压缩软件是哪款?
- IoU(Intersection over Union)
- 计算机高中期末总结作文,高中期末总结:高一期末总结作文
- python3计算长方形的周长和面积