Python正则表达式快速学习

更多Python知识,关注公众号[吾非同],回复1024获取精选资料包。

Python正则表达式快速学习

正则表达式(regular expression),简称regex或者re,表示高级文本模式匹配,是文本处理重要的方式,常用来进行字符串的检索、替换等。最开始在unix文本编辑器中使用,现在几乎各种高级编程语言都支持正则表达式。

在python中,可以使用内置模块re来使用正则表达式。

正则表达式的常用符号

匹配单个字符
图片[1]-Python正则表达式快速学习 - 程序员知识精选-程序员知识精选
匹配多个字符
图片[2]-Python正则表达式快速学习 - 程序员知识精选-程序员知识精选
其他匹配
图片[3]-Python正则表达式快速学习 - 程序员知识精选-程序员知识精选

re模块使用

python 的 re 模块提供了很多匹配方法,可以根据不同场景实现字符串的正则提取。

函数 描述 返回值
match(pattern, string, flags=0) 使用带有可选标记的正则表达式模式匹配字符串 匹配成功,返回匹配对象;如果失败,返回None
search(pattern, string, flags=0) 使用可选标记搜索字符串中第一次出现的正则表达式模式 匹配成功,返回匹配对象;如果失败,返回None
findall(pattern, string[, flags]) 查找字符串中所有(非重复)出现的正则表达式模式 匹配列表
finditer(pattern, string[, flags]) findall相同,但返回的不是列表 一个迭代器
split(pattern, string,max=0 ) 根据正则表达式的模式分隔符,split函数将字符串分割为列表,然后返回成功匹配的列表,分割最多操作max次,默认分割所有匹配成功的位置 分割后的列表
sub(pattern, repl, string, count=0) 使用repl替换count次正则表达式的模式在字符串中出现的位置;默认替换所有 替换操作数目
purge() 清除隐式编译的正则表达式模式;清除缓存

1.match 从字符串的第一个字符开始匹配,如果未匹配到返回None,匹配到则返回一个对象

a = 'A83C72D1D8E67'
r = re.match('A83',a)
print(r) #返回对象所在位置
print(r.group()) #使用group方法来提取数据
print(r.span())# 返回一个元组表示匹配位置(开始,结束)
输出
<re.Match object; span=(0, 3), match='A83'>
A83
(0, 3)

2.re.compile是将正则表达式转换为模式对象,提升匹配效率。使用compile转换一次之后,以后每次使用模式时就不用进行转换。

compile(pattern, flags=0)
pattern:写正则表达式
flags:匹配模式

可以看出返回的是一个匹配对象,它单独使用就没有任何意义,需要和findall(), search(), match()搭配使用。

res = re.compile('\w+')
res2 = res.search('*##abcd123_ABC####123').group()#Search与match类似,只是搜索整个字符串然后第一个匹配到指定的字符则返回值,未匹配到则返回None。
print(res2)
输出
abcd123_ABC

3.findall是匹配出字符串中所有跟指定值有关的值,并且以列表的形式返回,未匹配到则返回一个空的列表。

res = re.findall('ab+','abcdabddac')
print(res)
输出
['ab', 'ab']

4.re.split(pattern, string[, maxsplit=0, flags=0]):根据匹配进行切割字符串,并返回一个列表。

res = re.split('\W','123#abc#')
print(res)
输出
['123', 'abc', '']

5.字符串替换re.sub

import re
a = 'abcABC'
r = re.sub('abc','ABC',a)
print(r)

贪婪与非贪婪

Python里数量词默认是贪婪的,总是尝试匹配尽可能多的字符;

非贪婪操作符“?”,用在"*","+","?"的后面,要求正则匹配的越少越好。

res = re.findall('(p.+)','pythonpythonpython')
print(res)
输出
['pythonpythonpython']

res = re.findall('(p.+?)','pythonpythonpython')
print(res)
输出
['py', 'py', 'py']

正则匹配总写一个r是什么意思?

Python中字符串前面加上r,r表示raw的简及raw string意思是原生字符,也就是说是这个字符串中间的特殊字符不用转义。
比如你要表示‘\n’,可以这样:r'\n'

大家需要注意,正则表达式不需要刻意记住,常用的正则表达式,可以到网上搜索获取,当然,一般优先考虑使用内置方法实现匹配,然后再考虑正则。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发
程序员吾非同的头像-程序员知识精选

昵称

取消
昵称表情代码图片