当前位置: 首页 > article >正文

细说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提供了大量能使我们快速便捷地处理数据的函数和方法。


http://www.kler.cn/a/517806.html

相关文章:

  • const的用法
  • 如何利用AI LLM不断迭代生成更具专业性的提示词探索未知领域
  • ThinkPhp伪静态设置后,访问静态资源也提示找不到Controller
  • 使用 Tailwind CSS + PostCSS 实现响应式和可定制化的前端设计
  • Pandas基础02(DataFrame创建/索引/切片/属性/方法/层次化索引)
  • 22_解析XML配置文件_List列表
  • Elasticsearch——Elasticsearch实现原理解析
  • vue2在线生成二维码
  • php哪几个框架运行速度是比较快的?
  • leetcode——搜索二维矩阵II(java)
  • TCP 长连接和短连接
  • ubuntu22.04安装Gtsam解决Eigen不兼容问题
  • 深度学习笔记——循环神经网络之LSTM
  • 工业缺陷检测实战——基于深度学习YOLOv10神经网络PCB缺陷检测系统
  • 1.23学习记录
  • 【Feature Scaling】:加速梯度下降法的利器
  • NoSQL使用详解
  • 春节假期旅游热潮下,景区医疗安全如何全面升级?
  • 第R5周:天气预测
  • 竞赛算法总结
  • Flutter 给安卓签名时 使用 Android Studio 找不到 Generate Signed Bundle/APK 菜单问题
  • 基于 WPF 平台使用纯 C# 制作流体动画
  • 【软件测试】《软件测试计划》目录及内容概述
  • react中hooks之useDebugValue用法总结
  • 基于Springboot + vue实现的在线装修管理系统
  • FlinkSql使用中rank/dense_rank函数报错空指针