【python学习笔记】re模块(正则表达式)

目录

前言:

re模块的主要方法

特殊符号与字符

re.compile方法

re.match和re.search方法

re.findall方法

re.split方法


前言:

正则表达式(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)

结果:
['今年是', '年,明年是', '年,我', '年就毕业啦!']

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值