【python学习第11节笔记:正则表达式,python中使用正则表达式】

文章目录

一,正则表达式

什么是正则表达式:正则表达式又称规则表达式。用来匹配,检索,替换符合某个规则的文本。表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符,及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑。

1.1元字符

1.1.1元字符(1)

. 匹配单个字符,如 r.t匹配 rat,rot 等
* 匹配任意多个字符

  • 匹配一个或多个在它之前的那个字符,如:r+t 匹配 rt ,rrt 等
    \ 转意字符将元字符当作普通字符

1.1.1元字符(2)

? 只能匹配0或1个在他之前的字符,如: r?t ,只匹配 t 或者 rt
| 两个匹配条件进行逻辑''或''运算,如: \(him\|her\) 匹配 him 或者 her
$ 匹配行结束符,如: boy$ 匹配以boy位行结尾的字符串
^ 匹配一行的开始,如: ^boy 匹配以boy为行首的字符串

1.1.1元字符(3)

[ ] 匹配括号中的任意一个字符,如:r[aou]t 匹配 rot, rat, rut
[c1-c2] 括号中可以使用连字符-来指定,如:[0-5],匹配 0 1 2 3 4 5
[^c1-c2] 匹配除了指定区间外的补集,如:[^257a-c]匹配除了2 5 7 a b c以外的任何一个字符

1.1.1元字符(4)

\< 和 \> 匹配词(word)的开始和结束,如:\<the 匹配 them 不匹配 other,如:the\>匹配 them 不匹配 other
\( \) 将两个之间的表达式定义为一个'"组",并且将这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存9个),它们可以用 \1 到 \9的符号来引用。如:%s/\(99\)/\1aa/g 将99替换成99aa

1.1.1元字符(5)

\{ i \} 和 \{i , j \} 匹配指定数目的字符,如:a[1-6]\{2\}能够匹配到a后面跟着的正好2个字符的a13, a24, a54等不会匹配到 a123

二,python中使用正则表达式

python通过使用re模块,获得全部正则表达式的功能

2.1re.match

对字符串进行完整的匹配(从0开始匹配)

re.match(pattern, string, flags=0)

pattern:  匹配的正则表达式

string:   要匹配的字符串

flags:   标志位,用于 控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
示例1:

python 复制代码
import re
print(re.match('www','www2 213 sad')) #在起始位置匹配
print(re.match('www','2 213 swwwad')) #不在起始位置匹配

#执行结果
<_sre.SRE_Match object; span=(0, 3), match='www'>
None

示例2:

. 代表任意一个字符

* 是前面一个字符的任意重复

re.I 表示忽略大小写

r 表示原始字符串(不用转义)

python 复制代码
print("\ne")
print(r"\ne")
#执行结果

e
\ne

直接输出matchobj.group()会输出匹配到的整句话,matchobj.group(1)会输出匹配到的第一组

matchobj.group(2)会输出匹配到的第一组。

python 复制代码
import re
line = "Page is a pig"
matchobj = re.match(r'(.*) is a (.*)',line,re.I)
print(matchobj.group())
print(matchobj.group(1))
print(matchobj.group(2))


#执行结果
Page is a pig
Page
pig

2.2re.search

扫描整个字符串并返回第一个成功的匹配

re.search(pattern, string, flags=0)

pattern:  匹配的正则表达式

string:   要匹配的字符串

flags:   标志位,用于 控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
示例:

python 复制代码
import re
print(re.search('www','2 213 swwwad'))
print(re.search('www','2 213 swwwad').group()) #匹配不上返回空

#执行结果
<_sre.SRE_Match object; span=(7, 10), match='www'>
www

2.3re.sub

用于替换字符串中的匹配项

re.sub(pattern , repl , string , count=0, flags=0)

pattern:  匹配的正则表达式

repl:  替换的字符串,也可以为一个函数

string:   要被查找替换的字符串

count:  模式匹配后替换的最大次数,默认 0 表示替换所有的匹配

flags:   标志位,用于 控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
示例1:传入的是一个字符串

#.*$ 的意思是以#开头任意字符结尾

\D 的意思是非数字的字符串

python 复制代码
import re
phone = "0086-10-12345678 #这是一个国内北京的电话号码"

#删除后面的注释
num = re.sub(r'#.*$',"",phone)
print(num)

#删除非数字的字符串
num = re.sub(r'\D',"",phone)
print(num)

#执行结果
0086-10-12345678 
00861012345678

示例2:传入的是一个函数

(?P<value>...):这部分是正则表达式中的命名捕获组语法。它允许给一个子模式(...)指定一个名称,这里的名称是'value'。通过这个名称,可以在匹配结果中引用到这个具体的子模式。

\d+:这是一个子模式,用于匹配一个或多个数字字符。\d表示匹配任意一个数字字符(0-9),而+表示匹配前面的模式一次或多次。

python 复制代码
import re
def double(matched):
    value = int(matched.group('value'))
    return str(value*2)

s = '321+123=444'
print(re.sub('(?P<value>\d+)',double,s))

#执行结果
642+246=888

2.4 正则表达式修饰符

1,re.I : 忽略大小写匹配

2.,re.M : 多行匹配。使 ^ 和 $ 可以匹配每一行的开头和结尾,而不仅仅是整个字符串的开头和结尾。

3.re.S : 单行匹配。使 . 可以匹配包括换行符在内的任意字符

4,re.X: 冗长模式。允许使用空白字符和注释来增加正则表达式的可读性。

相关推荐
yunhuibin16 分钟前
ffmpeg面向对象——拉流协议匹配机制探索
学习·ffmpeg
Ljubim.te18 分钟前
软件设计师——数据结构
数据结构·笔记
爱写代码的小朋友19 分钟前
Python的几个高级特性
python
Eric.Lee202125 分钟前
数据集-目标检测系列- 螃蟹 检测数据集 crab >> DataBall
python·深度学习·算法·目标检测·计算机视觉·数据集·螃蟹检测
hengzhepa26 分钟前
ElasticSearch备考 -- Search across cluster
学习·elasticsearch·搜索引擎·全文检索·es
一丝晨光31 分钟前
C++、Ruby和JavaScript
java·开发语言·javascript·c++·python·c·ruby
sp_wxf1 小时前
Lambda表达式
开发语言·python
蜡笔小新星1 小时前
Python Kivy库学习路线
开发语言·网络·经验分享·python·学习
攸攸太上1 小时前
JMeter学习
java·后端·学习·jmeter·微服务
篝火悟者1 小时前
问题-python-运行报错-SyntaxError: Non-UTF-8 code starting with ‘\xd5‘ in file 汉字编码问题
开发语言·python