Python
的 re 模块(Regular Expression
正则表达式)提供了各种正则表达式的匹配操作,在文本解析、复杂字符串提取时起到很重要的作用,本篇详细讲解 re 模块的使用。
re.match()
从字符串的起始位置按模式匹配,如果匹配不成功,或者不是在起始位置匹配成功,返回 None
。匹配成功时返回一个结果对象。
re.match(pattern, string, flags=0)
- pattern:匹配的正则表达式
- string:源字符串
- flags:标志位,用于控制正则表达式的匹配方式,如是否区分大小写、是否多行匹配等,如
re.I
匹配时忽略字符串中的大小写。
import re
print(re.match('aa', 'Aaaabc', flags=re.I))
print(re.match('aa', 'bbaabc', flags=re.I))
上面第一条结果返回成功匹配的对象,可以用 group(num)
或 groups()
函数获取匹配结果,也可以用 span(num)
获取匹配结果在源字符串中开始和结束的位置。
先来看一下 group(num)
与 groups()
的用法。
- group(num=0):根据输入的组号(或多个组号),返回一个字符串(或元组),元组中包含组号的对应的撇皮结果。默认为 0,即返回
re.match()
匹配到的完整内容。 - groups():返回一个包含指定组号字符串的元组,从 1 到 最后。
直接看例子更清晰
line = "Python新视野"
matchObj = re.match(r'(.*)新(.*)', line)
print("matchObj.group(0) : ", matchObj.group())
print("matchObj.group(1, 2) : ", matchObj.group(1, 2))
print("matchObj.groups() : ", matchObj.groups())
matchObj
匹配的所有结果其实就是 ('Python新视野', 'Python', '视野')
,group(num)
中的 num
实际就是匹配结果对应的索引,这样再来看上面的结果应该就很清晰了。同时可以看到 groups()
实际相当于 group(1, 2, ... , max)
。
明白了 group(num)
的用法,那么 span(num)
其实就很好理解,它与 group
的不同之处在于它的返回结果是匹配结果在源字符串中的起始与结束的索引。
print("matchObj.span(0) : ", matchObj.span(0))
print("matchObj.span(2) : ", matchObj.span(2))
re.search ()
在整个字符串匹配并返回第一个成功的匹配。
re.search(pattern, string, flags=0)
re.match()
与 re.search()
的不同之处很好理解,re.match()
是只匹配开头的字符串,如果匹配失败,后面的将不再匹配,直接返回 None
。而 re.search()
是在整个字符串中匹配,如果起始位置没有匹配到,那么它会继续匹配剩余的字符串,直到第一次匹配成功,如果字符串结束都没有匹配成功,那么返回 None
。使用时要注意如果匹配失败的话就不能实用 span(num)
等函数获取匹配结果了哦!
看个例子。
try:
print(re.search('aa','aaaabc').span())
print(re.search('aa','bbaaac').span())
print(re.search('aa','bbaccc').span()) # 匹配失败
except Exception as e:
print(e)
re.findall()
用于在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。它与 re.match()
作用十分详细,唯一不同就是 re.match()
不但包含了字串,还包含了匹配到的完整结果。看个例子,一目了然!
re.findall(pattern, string, flags=0)
line = "Python新视野"
print('re.findall:', re.findall(r'(.*)新(.*)', line))
print('re.match:', re.match(r'(.*)新(.*)', line).group(0, 1, 2))
re.finditer()
在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
re.finditer(pattern, string, flags=0)
result = re.finditer(r"\d+", "A1B2C3")
for match in result:
print(match.group())
re.sub()
函数可以将字符串中满足匹配条件的内容全部替换。
re.search(pattern, repl, string, count, flags=0)
- repl:替换的字符串,可以是一个函数。
- count:匹配成功后替换的最大次数,默认为0,表示替换所有的匹配。
line = 'sun是菜鸡'
# ?
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?