欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > 细说Python操作之正则表达式

细说Python操作之正则表达式

2025/4/21 1:54:25 来源:https://blog.csdn.net/qq_65664454/article/details/145346001  浏览:    关键词:细说Python操作之正则表达式

系列文章目录

第一章:Python 操作之正则表达式


文章目录

  • 系列文章目录
  • 前言
  • 一、pandas是什么?
  • 二、使用步骤
    • 1.引入库
    • 2.读入数据
  • 总结


前言

正则表达式(Regular Expression,简称 regex 或 regexp)是一种用于匹配字符串中字符组合的模式描述工具。它广泛用于文本搜索、数据验证、字符串替换等领域。正则表达式通过特定的语法规则,定义了搜索模式,可以高效地查找、替换或验证字符串是否符合特定的格式。

以下是我列举的正则表达式的基本元素和用法示例:


一、元字符:

元在中文之中有一个解释是“根本”。万丈高楼平地起,其实在我认知中学会元字符的应用,就如用砖瓦,已经可以盖起来一座相当高的楼层了,毕竟元字符是正则表达式的基础,语法都是由元字符的运用演化而来,所以理解元字符的用法是重中之重。下面是我列举的一些常规元字符的用法:

1.1通配符.与字符集[]:

顾名思义,通配符是可以理解为能够广泛对字符进行匹配,包括但不限于字符串、数字、汉字、特殊符号等

而字符集就可以看做是一个你输入的匹配限定条件的集合,只有满足字符集之中的内容才会进行匹配

代码说明
.匹配除换行符以外的任意字符
[   ]匹配字母或数字或下划线或汉字

1.1.1通配符. 可以匹配到除了\n意外的其他字符,一个符号占据的是一个字符的位置

以字符串为例:s= "apple ape agree age amaze animate advertise a\ne"

我们可以看到字符串s之中是存在\n这个换行符的

我们要查找三个字母,有a开头e结尾的字符串那么得到的结果是:

s= "apple ape agree age amaze animate advertise a\ne"
ret = re.findall('a.e',s)

如果我们再要查找四个字母,有a开头e结尾的字符串,则需要再加一个.符号,例如:

s= "apple ape agree age amaze animate advertise a\ne"
ret = re.findall('a..e',s)

1.1.2字符集[]匹配字母或数字或下划线或汉字,一个[]识别匹配的是[]中的一个符号

以字符串为例:s= "apple ape agree age amaze animate advertise alne a&e a2e a6e a9e"

我们需要的是以a开头,以e结尾的三个由字母组成的字符串,那么.就不适用了,因为通配符会匹配任意除换行符以外的字符,那么这里就需要使用字符集来进行字符的定向选择

s= "apple ape agree age amaze animate advertise alne a&e a2e a6e a9e"
ret = re.findall('a[a-z]e',s)

[a-z]中a-z其实指的是英文字母a一直到z,是一个范围条件

如果我们再要查找四个字母,有a开头e结尾的字符串,则需要再加一个[]符号,例如:

s= "apple ape agree age amaze animate advertise alne a&e a2e a6e a9e"
ret = re.findall('a[a-z][a-z]e',s)

而[]也可以限制选择的字符是数字还是特殊符号,例如:

ret = re.findall('a[0-9]e',s)

        ·

ret = re.findall('a[&|6]e',s)

注:|是或运算符

其中还有一个需要注意的字符,那就是取反字符^,这个放在字符串前面表示就是匹配字符串开始的位置(下文会说明),而放在字符集里面表示取反[^0-9]即不取0到9的数字,那么就是非数字字符与\D等效;[^a-zA-Z0-9_]表示不取数字、字母和下划线,等价于\W(\D与\W转义字符会给予说明)

s= "apple ape agree age amaze animate advertise alne a&e a2e a6e a9e"
ret = re.findall('a[^0-9]e',s)

1.2重复元字符:

顾名思义,重复元字符就是用来匹配一个或多个重复的字符或子表达式

代码/语法说明
*重复零次或更多次
+重复一次或更多次
?重复零次或一次
{n}重复n次
{n,}重复n次或更多次
{n,m}重复n到m次

1.2.2{}的用法:

思想就是{}中,通过添加数字,来决定匹配重复字符的次数,形式是  需要匹配的内容{n,m}

以字符串为例:s= "aecee apple acre ape agree age anaze animate advertise a\ne a&e age a6e a9e"

如果我们需要找到以a开头以e结尾的五个字符,那么根据上文通配符可以写成 re.findall('a...e',s)

但是我们可能会遇到百八十个的情况,就不能只靠.,那么就需要使用{}:

s= "aecee apple acre ape agree age anaze animate advertise a\ne a&e age a6e a9e"
ret = re.findall('a.{3}e',s)

如果我们需要匹配以a开头,以e结尾的长度最大为7的字符,那么就可以在{}中限制查找条件

s= "aecee apple acre ape agree age anaze animate advertise a\ne a&e age a6e a9e"
ret = re.findall('a.{0,5}e',s)

我们不希望取到中间有数字、特殊符号、空格怎么办?

s= "aeeee apple acre ape agree age anaze animate advertise a\ne a&e age a6e a9e"
ret = re.findall('a[^0-9\\n\\s&]{0,100}e',s)

有人注意到,列表最后两个元素中存在a&e age和a6e a9e,为什么不是单独拆开的呢?

其实这里涉及到重复元字符中默认的贪婪匹配,先是以a开头,以e结尾,以{}中最大为5来进行查找,如果5找不到,那么在以a、e之间为4个字符来进行匹配,一次类推,直到a、e之间为0个字符。而a&e age和a6e a9e中空格字符占据了一个字符的位置,实际的匹配就是a【&e ag】e和a【6e a9】e。

注:下面的*、+、?都默认贪婪匹配

如何取消贪婪匹配呢?可以在重复元字符后面跟一个问号,*、+、?也适用

以s= "aeeee apple acre ape agree age anaze animate advertise a\ne a&e age a6e a9e"为例:、

贪婪匹配:

s= "aeeee apple acre ape agree age anaze animate advertise a\ne a&e age a6e a9e"
ret = re.findall('a[^0-9\\n\\s&]*e',s)

非贪婪:

s= "aeeee apple acre ape agree age anaze animate advertise a\ne a&e age a6e a9e"
ret = re.findall('a[^0-9\\n\\s&]*?e',s)

1.2.2*的用法:

*其实就是{0,∞}的缩写,即从字符串末尾开始匹配

s= "aecee apple acre ape agree age anaze animate advertise a\ne a&e age a6e a9e"
ret = re.findall('a.*e',s)

这里匹配不到字符串末尾是因为换行符的存在,通配符是匹配不到换行符的,所以,列表中出现了两个元素

1.2.3+的用法:

+其实就是{1,∞}的缩写

s= "aecee apple acre ape agree age anaze animate advertise a\ne a&e age a6e a9e"
ret = re.findall('a.+e',s)

1.2.4?的用法:

?其实就是{0,1}的缩写

s= "aeeee apple acre ape agree age anaze animate advertise a\ne a&e age a6e a9e"
ret = re.findall('a.?e',s)

取消贪婪为

s= "aeeee apple acre ape agree age anaze animate advertise a\ne a&e age a6e a9e"
ret = re.findall('a.??e',s)

1.3转义符:

代码说明
\w匹配字母或数字或下划线或汉字
\W匹配一个非字母、非数字或非下划线字符(等价于 [^a-zA-Z0-9_]
\d匹配数字
\D匹配一个非数字字符
\b匹配单词的开始或结束
^匹配字符串的开始(在集合字符里[^a]表示非(不匹配)的意思
$匹配字符串的结束
\s匹配任意的空白符

二、其他语法:


总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com