Python常用标准库之正则表达式

1.re模块常用函数

Python通过内置的标准库 re 模块来支持正则表达式,通过 re 模块自带的函数来进行正则搜索或匹配,帮助我们找到想要的文本内容。

re 模块的核心函数和方法如下:
在这里插入图片描述

1.1 匹配对象以及group()和groups()方法

当处理正则表达式时,除了正则表达式对象之外,还有另一个对象类型:匹配对象。这些是成功调用match()或者search()返回的对象。匹配对象有两个主要的方法:group()和groups()

group()要么返回整个匹配对象,要么根据要求返回特定子组。groups()则仅返回一个包含唯一或者全部子组的元组。如果没有子组的要求,那么当group()仍然返回整个匹配时,groups()返回一个空元组。

1.2 match()与search():匹配单个目标

match()函数试图从字符串的起始部分对模式进行匹配。

如果匹配成功,就返回一个匹配对象;如果匹配失败,就返回None,匹配对象的group()方法能够用于显示那个成功的匹配。

search()的使用方式与match()完全一致,不同之处在于search()可以搜索在文本任意位置第一次出现的匹配目标。

如果搜索到成功的匹配,就会返回一个匹配对象;否则,返回None。

输入:

import re
# match
result1 = re.match(r'python', 'pythonhello').group()
# search
result2 = re.search(r'python', 'hellopython').group()
print(result1)
print(result2)

输出:

python
python

1.3 findall():匹配多个相同目标

查找字符串中多次出现的目标,结果以列表的形式返回,不需要group()方法。

输入:

import re
# findall()
result3 = re.findall(r'python', 'python hello python')
print(result3)

输出:

['python', 'python']

1.4 split():分割字符串

split函数可以把一段字符串分割成多个字符,把分割的结果以列表的形式返回。

输入:

import re
# split()
text = "hello\nworld\npython"
pat = '\n'
result4 = re.split(pattern=pat, string=text)
print(result4)

输出:

['hello', 'world', 'python']

1.5 sub()与subn():搜索替换

sub()和subn()都是将某字符串中所有匹配正则表达式的部分进行某种形式的替换,但subn()还返回一个表示替换的总数,替换后的字符串和表示替换总数的数字一起作为一个拥有两个元素的元组返回。

案例一:
输入:

import re
# sub()与subn()
text = "hello\nworld\npython"
pat = '\n'
replace = ","
result5 = re.sub(pattern=pat, repl=replace, string=text)
result6 = re.subn(pattern=pat, repl=replace, string=text)
print(result5)
print(result6)

输出:

hello,world,python
('hello,world,python', 2)

案例二:
输入:

text = "<div>\
<p>\n岗位\n职责:</p>\
<p>完成推荐算法、数据统计、接口、后台等服务器端相关工作</p>\
<p><br></p>\
<p>必备要求:</p>\
<p>良好的自我驱动力和职业素养,工作积极主动、结果导向</p>\
<p>&nbsp;<br></p>\
<p>技术要求:</p>\
<p>1、一年以上 Python 开发经验,掌握面向对象分析和设计,了解设计模式</p>\
<p>2、掌握HTTP协议,熟悉MVC、MVVM等概念以及相关WEB开发框架</p>\
<p>3、掌握关系数据库开发设计,掌握 SQL,熟练使用 MySQL/PostgreSQL 中的一种<br></p>\
<p>4、掌握NoSQL、MQ,熟练使用对应技术解决方案</p>\
<p>5、熟悉 Javascript/CSS/HTML5,JQuery、React、Vue.js</p>\
<p>&nbsp;<br></p>\
<p>加分项:</p>\
<p>大数据,数理统计,机器学习,sklearn,高性能,大并发。</p>\
\
        </div>"

res = re.sub(r'<[^>]*>|&nbsp;|\n', '', text)
print(res)

输出:

岗位职责:完成推荐算法、数据统计、接口、后台等服务器端相关工作必备要求:良好的自我驱动力和职业素养,工作积极主动、结果导向技术要求:1、一年以上 Python 开发经验,掌握面向对象分析和设计,了解设计模式2、掌握HTTP协议,熟悉MVC、MVVM等概念以及相关WEB开发框架3、掌握关系数据库开发设计,掌握 SQL,熟练使用 MySQL/PostgreSQL 中的一种4、掌握NoSQL、MQ,熟练使用对应技术解决方案5、熟悉 Javascript/CSS/HTML5,JQuery、React、Vue.js加分项:大数据,数理统计,机器学习,sklearn,高性能,大并发。  

2.特殊符号和字符

正则表达式由丰富的符号组成,主要分为两类,一类是普通字符,一类是元字符

普通字符指只具有自己本身原始含义,不具备其他功能或含义的字符, 如所有大写和小写字母、所有数字和一些其他符号。

元字符指在正则表达式中具有特殊含义的专用字符,是除了自己本身的原始含义,还具备某些功能或具有某一类属性、意义的字符,如\d代表代表匹配任何十进制数字。

在这里插入图片描述
在这里插入图片描述

2.1 管道符号“|”:匹配多个不同字符串

管道符号 | 表示择一匹配,即管道符号左右任何一个都能匹配。

输入:

import re
# 匹配hello、你好
text = "hello\nworld\npython,你好"
pat = "hello|你好"
result = re.findall(pat, text)
print(result)

输出:

['hello', '你好']

2.2 点号:匹配任意单个字符

点号或句点符号(.)匹配除了换行符 \n 以外的任何字符。

输入:

import re
# 匹配所有一个以“刘”开始的名称
text = "hello 胡月 刘易 刘亦 王二狗 刘X 刘*"
pat = "刘."
result = re.findall(pat, text)
print(result)

输出:

['刘易', '刘亦', '刘X', '刘*']

2.3 表示字符集的特殊字符

通过中括号包含的内容称为字符集,常用字符集如下:

[a-z] :表示从小写的a到z的26个字母的字符集;

[A-Z] :表示从大写的A到Z的26个字母的字符集;

[0-9] :表示从0到9的10个数字的字符集;

\w:表示匹配任何字母数字字符,包含下划线,与[A-Za-z0-9_]相同;

\d :表示匹配任何十进制数字,与[0-9]一致;

[a-zA-Z0-9_]:表示包含所有的26个字母(含大小写)、数字(从0到9的10个数字)以及下划线(_)的字符集。

输入:

# 找出所有以.com结尾的、合法的邮箱地址
# 合法邮箱要求@前面和后面部分(除了.com外)只能包含字母、数字、下划线
import re
text = "htt_yfe@126.com, grd432.@qq.com, assdf@yy.coxx, mnbgfd123@good.com"
# 方法一,匹配规则:[a-zA-Z0-9_]+@[a-zA-Z0-9_]+\.com
pat1 = '[a-zA-Z0-9_]+@[a-zA-Z0-9_]+\.com'
result1 = re.findall(pat1, text)
# 方法二,匹配规则:\w+@\w+\.com
pat2 = '\w+@\w+\.com'
result2 = re.findall(pat2, text)
print(result1)
print(result2)

输出:

['htt_yfe@126.com', 'mnbgfd123@good
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值