一级棒!这应该是最好的 “re正则表达式” 使用教程了!(一)

简介: 一级棒!这应该是最好的 “re正则表达式” 使用教程了!(一)

1. 什么是“正则表达式”

“正则表达式” 是一组由字母和符号组成的特殊文本,可以帮助我们从某个复杂的字符串中,提取出满足我们要求的特殊文本。


用一个我理解的比喻带着大家体会 “正则匹配的过程”。苹果道具相当于写的“正则表达式”,水果市场相当于“字符串”,“正则匹配的过程”就相当于拿着苹果道具去“水果市场”找苹果的过程,每匹配到一个就返回一个,否则就什么也没有。


2. 常用“操作符”介绍

正则表达式之所以这么强大,是因为拥有很多专用的操作符(又称“元字符”)、特殊字符和修饰符。


所谓“元字符”,指的是那些不仅仅可以表示字符本身含义、并且还可以表示其他特殊含义的字符。常用的元字符有 . [ ] () ^ $ | \ ? * +{ }共11种,为了更加方便记忆和学习正则表达式,我将元字符再细化为7个普通元字符 + 4个常用量化符。


特殊字符主要介绍了6个,\d、 \D、 \s、 \S、 \w、 \W


① 7个普通元字符

下面这7个符号,我相信并不太多,大家一定可以记忆下来,不行就设置为壁纸帮助记忆。黄同学真的是一分再分,只能简化这份上了。

image.png


② 4个常用量化符

所为“量化符”,指的就是将紧挨着量化符前面的那个字符,匹配0次、1次或者多次,详细说明见下表。

image.png


③ 6个特殊符号

所为“特殊符”,指的就是由转义字符加某些字母组合而成的,具有特殊意义的特殊字符,详细说明见下表。

image.png


④ 3个常用修饰符

其实正则表达式中的修饰符不止3个,但是我只挑重要的给大家讲,详细说明见下表。

image.png


3. 常用方法介绍

其中三个函数用于查找匹配match()、search()、findall(),一个函数sub()用于替换,还有一个函数compile()用于编译正则表达式。


在分别讲述这些函数之前,我们分别讲述一下这些函数的含义。


match():匹配字符串的开头,如果开头匹配不上,则返回None;

search():扫描整个字符串,匹配后立即返回,不在往后面匹配;

findall():扫描整个字符串,以列表形式返回所有的匹配值;

compile():将字符串编译成正则表达式对象,供 match() 、 search() 和findall()函数使用;

sub():扫描整个字符串,用于替换字符串的某些值;

split():扫描整个字符串,按照指定分隔符切分字符串;

① match(pattern,string,flag)

match()函数语法格式如下:


pattern:你写的正则表达式;

string:待匹配的字符串;

flag:修饰符;

首先咱们来演示match()函数的用法。对于这样一个字符串s1:


s1 = 'ab黄cd同abc学'


需求一:我们想要得到字符串s1中的a,使用match()函数应该怎么做。


re.match('a',s1)


结果如下:

image.png

可以发现:这里得到的是一个match对象,并没有任何的结果。那么,怎么获取到具体的值。


直接调用对象的group()函数,可以获取到具体的值。


s1 = 'ab黄cd同abc学'
r1 = re.match('a',s1)
r1.group()


结果如下:

image.png

可以发现,match()函数一旦匹配到具体值,就立即返回,不再往后面匹配。因此,这里只返回了一个’a’。


需求二:我们现在不想匹配字符串s1中的a,而是想匹配s1中的b,又应该怎么做呢?


s1 = 'ab黄cd同abc学'
r2 = re.match('b',s1)
r2.group()


结果如下:

image.png

此时可以发现:报错了。这是由于match()函数只能从字符串开头匹配,如果开头没有匹配上,则会报错。因为字符串s1是以a开头,不是以b开头,所以匹配不上。


注:这个函数局限性太大,用的不是太多,因此大家知道这个事儿就行。match()函数主要是用于区分下面要讲的search()函数。


② search(pattern, string,flag)

search()函数语法格式如下:


pattern:你写的正则表达式;

string:待匹配的字符串;

flag:修饰符;

还是同样的一个字符串s1:


s1 = 'ab黄cd同abc学'


需求一:我们想要得到字符串s1中的a,使用search()函数应该怎么做。


s1 = 'ab黄cd同abc学'
r2 = re.search('a',s1)
r2.group()


结果如下:

image.png

需求二:使用search()函数,去匹配字符串s1中的b。


s1 = 'ab黄cd同abc学'
r2 = re.search('b',s1)
r2.group()


结果如下:

image.png

search()函数与match()函数不同点:match()函数如果开头匹配不上,就无法匹配。search()函数是扫描整个字符串,只要能匹配上,就有结果。


search()函数与match()函数相同点:它们一旦匹配上了,就立即返回结果,而不再往后面匹配(即使后面能匹配上)。如果都匹配不上,会出现同样的错误,如下图所示:


注意:search()函数比match()函数要实用一些,有时候我们只想匹配字符串的,第一个匹配值,后面的匹配值我们不想要,search()函数可以很好的帮忙。


相关文章
Python 内置正则表达式库re的使用
正则表达式是记录文本规则的代码,用于查找和处理符合特定规则的字符串。在Python中,常通过原生字符串`r'string'`表示。使用`re.compile()`创建正则对象,便于多次使用。匹配字符串有`match()`(从开头匹配)、`search()`(搜索首个匹配)和`findall()`(找所有匹配)。替换字符串用`sub()`,分割字符串则用`split()`。
|
1月前
|
Python
在Python中,可以使用内置的`re`模块来处理正则表达式
在Python中,可以使用内置的`re`模块来处理正则表达式
53 5
|
4月前
|
Python
告别死记硬背:掌握Python正则表达式re模块的高效应用&[面向百度编程]
Python中正则表达式的高效应用,通过内置的`re`模块,讲解了如何匹配、提取和替换字符串,并提供了相关示例代码,同时提倡通过实践来掌握正则表达式的使用,而不是仅仅依赖网络搜索。
55 1
|
4月前
|
SQL 分布式计算 算法
【python】python指南(三):使用正则表达式re提取文本中的http链接
【python】python指南(三):使用正则表达式re提取文本中的http链接
44 0
|
5月前
|
关系型数据库 MySQL
MySQL 保姆级教程(七):用正则表达式进行搜索
MySQL 保姆级教程(七):用正则表达式进行搜索
|
6月前
|
Python
Python中re模块的正则表达式
【6月更文挑战第2天】了解Python的re模块,它是处理正则表达式的核心工具。正则表达式用于在文本中查找特定模式。本文讨论了re模块的用法和技巧,包括导入模块、匹配、分组、替换文本、编译正则表达式以及使用预定义字符类、量词、锚点等高级功能。通过实例展示了如何在Python中执行这些操作,帮助提升文本处理能力。掌握这些技巧将使你更有效地利用正则表达式解决字符串处理问题。
|
5月前
|
数据采集 监控 Java
正则表达式教程:从入门到实战应用
正则表达式教程:从入门到实战应用
|
6月前
|
数据采集 监控 Java
正则表达式教程:从入门到实战应用
正则表达式教程:从入门到实战应用
|
6月前
|
Python
python re 正则表达式库的使用
python re 正则表达式库的使用
49 0
|
6月前
|
数据库 Python
Python网络数据抓取(8):正则表达式
Python网络数据抓取(8):正则表达式
66 2