python学习笔记re模块正则表达式
目录
前言:
正则表达式(regex)是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
re模块的主要方法
Python自带的re模块主要包含如下6种方法:
re.compile: 编译一个正则表达式模式(pattern);
re.match: 从头开始匹配, 使用group()方法可以获取第一个匹配值;
re.search: 用包含方式匹配,使用group()方法可以获取第一个匹配值;
re.findall: 用包含方式匹配,把所有匹配到的字符以列表中的元素返回多个匹配值;
re.sub: 匹配字符并替换;
re.split: 匹配到的字符当做列表分隔符,返回列表;
特殊符号与字符
1.管道符(|):
模式:A|B|C
含义:从多个模式中选择其一
作用:用于分割不同的表达式
注意:如果A模式匹配成功后,不会再匹配B、C,即管道符是非贪婪的。
如果要匹配普通字符"|",可以使用转义字符"\|"
2.句点(.):
模式:A.B.C
含义:匹配任意单个字符,除了换行符\n除外,可以匹配普通空格(非\n)
作用:类似占位符,只占一个字符的空位
注意:re.S或者re.DOTALL,可以用来任意单个字符,包括换行符\n
匹配普通字符句点,使用转义字符\.
3.脱字符(^):
模式:^start
含义:在字符串的开始位置进行匹配
作用:与大多数模式不同,^(脱字符)指定了匹配的起始位置
4.美元符($):
模式:end$
含义:以末尾的字符串模式进行匹配
作用:与脱字符差不多,都是指定匹配的位置
5.方括号([])与取反([^]):
模式:匹配一对方括号中的任一字符
示例:
[amk]: 匹配字符'a'或者'm'或者'k'
[a-z]:匹配小写字母a至z
[0-10]:匹配数字0至10
[^aeiou]: 表示不匹配方括号中出现的任一字符,即匹配非元音字母
6.闭包操作符实现存在性和频率匹配
以下为贪婪匹配模式:They match as much text as possible.
星号(*): 匹配其左边出现的正则表达式0次或者多次,即[0, oo),取值为整数
加号( ): 匹配其左边出现的正则表达式1次或者多次,即[1, oo), 取值为正整数
问号(?): 匹配其左边出现的正则表达式0次或者1次
花括号{N}:匹配其左边出现的正则表达式N次
花括号{M, N}:匹配其左边出现的正则表达式M~N次
以下为非贪婪匹配模式:“偷懒”模式,as few characters as possible will be matched.
*?:匹配0次
?:匹配1次
??:匹配0次
{M, N}?: 只匹配M次
7. 反斜杠(\):
作用:将以上一些特殊字符进行转义,变为普通字符,比如\? \. \*等。
8.使用圆括号()分组:
含义:有些时候,我们不仅想知道整个字符串是否匹配我们的标准,可能还会对匹配成功的数据更感兴趣,想要提取已经成功匹配的特定字符串或者字符串,这个时候我们可以使用括号包括任何正则表达式。
作用:对正则表达式分组,匹配子组。
9.字符集的特殊字符:
含义:有些特殊字符能够表示字符集
\d 任何十进制数字,即[0-9]
\D 表示任何非十进制数字,即[^0-9]
\w 全部字母、数字的字符集,相当于[A-Za-z0-9]
\s 表示空白字符
\b 匹配字符串边界,
\B 匹配出现在一个单词中间的模式,即不是单词边界
re.compile方法
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 为了增加可读性,忽略空格和 # 后面的注释
上述flags re.I和re.M是非常常用的。如果要同时使用两个flags,可以使用re.I | re.M。
re.match和re.search方法
re.match和re.search方法类似,唯一不同的是re.match从头匹配,re.search可以从字符串中任一位置匹配。如果有匹配对象match返回,可以使用match.group()提取匹配字符串。
格式:
re.match(pattern, string)
re.search(pattern, string)
注意:re.match是从头匹配的,没有符合的表达式,就返回None。re.search方法虽然可以从字符串任何位置开始搜索匹配,但一旦找到第一个匹配对象,其就停止工作了。如果想从一个字符串中提取所需符合正则表达式模式的所有字符串,需要使用re.findall方法。
-
例子:
-
import re
-
-
year_pattern = re.compile("\d{4}") # 匹配四位整数
-
string = "今年是2021年,明年是2022年,我2023年就毕业啦!"
-
match = re.match(year_pattern, string)
-
match2 = re.search(year_pattern,string)
-
print(match)
-
print(match2)
-
-
结果:
-
None
-
<_sre.SRE_Match object; span=(3, 7), match='2021'>
re.findall方法
当从一个字符串中提取所有符合正则表达式的字符串列表时需要使用re.findall方法。findall方法使用方法有两种,一种是pattern.findall(string) ,另一种是re.findall(pattern, string)。re.findall方法经常用于从爬虫爬来的文本中提取有用信息。
-
举例:
-
import re
-
-
year_pattern = re.compile("\d{4}") # 匹配四位整数
-
string = "今年是2021年,明年是2022年,我2023年就毕业啦!"
-
match = re.findall(year_pattern, string)
-
print(match)
-
-
结果:
-
['2021', '2022', '2023']
re.sub方法
用于去除空格,无关字符或隐藏敏感字符。
格式:
re.sub(pattern, new_string, current_string)
-
import re
-
-
year_pattern = re.compile("\d{4}") # 匹配四位整数
-
string = "今年是2021年,明年是2022年,我2023年就毕业啦!"
-
match = re.sub(year_pattern, "****",string)
-
print(match)
-
-
-
结果:
-
今年是****年,明年是****年,我****年就毕业啦!
re.split方法
返回分割后的字符串列表。
格式:
re.split(pattern, string)
-
import re
-
-
year_pattern = re.compile("\d{4}") # 匹配四位整数
-
string = "今年是2021年,明年是2022年,我2023年就毕业啦!"
-
match = re.split(year_pattern,string)
-
print(match)
-
-
结果:
-
['今年是', '年,明年是', '年,我', '年就毕业啦!']
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgffafi
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01