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

正则表达式新解

文章目录

  • 是什么?
  • 正则用法
    • 匹配单个字符
    • 匹配一组字符
    • 其他元字符
    • 核心函数
  • 贪婪匹配和非贪婪匹配
  • 正则练习

是什么?

正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"),可以用来描述和匹配字符串的特定模式。

正则表达式是一种用于模式匹配和搜索文本的工具。

正则表达式提供了一种灵活且强大的方式来查找、替换、验证和提取文本数据。

正则表达式可以应用于各种编程语言和文本处理工具中,如 JavaScript、Python、Java、Perl 等。

也就是说,正则表达式是用来筛选信息的工具,用于匹配查找替换等操作,它是一串特殊字符的集合。正则表达式用来匹配有相似特征的字符串

#为什么要用正则表达?

就是在表单验证时,准确的判断一个字符串是不是某种固定格式。比如邮箱的验证、手机号的验证等。目的是避免恶意用户的乱输入,使表单的收集是我们想要的格式!

想象一下,您正在编写应用程序,并且您希望在用户选择用户名时设置规则。我们希望用户名可以包含字母,数字,下划线和连字符。
为了让它看起来不丑,我们还想限制用户名中的字符数量。这时我们可以使用正则表达式来验证用户名

也就是说,使用正则表达式的意义在于将数据转化为用户需要的格式,使信息更加形象表达,方便查找是否有恶意信息

正则用法

匹配单个字符

记号说明
.匹配任意单个字符(换行符除外). 表示真正的.
[…x-y…]匹配字符集合里的任意单个字符
[^…x-y…]匹配不在字符组里的任意单个字符
\d匹配任意数字,与[0-9] 同义
\w匹配任意数字、字母、下划线,与[0-9a-zA-Z_] 同义
\s匹配空白字符,与[\r\v\f\t\n] 同义

匹配一组字符

记号说明
字符串匹配字符串值
字符串1|字符串2匹配字符串1或字符串2
*左邻第一个字符出现0 次或无穷次
+左邻第一个字符最少出现1 次或无穷次
?左邻第一个字符出现0 次或1 次
{m,n}左邻第一个字符出现最少m 次最多n 次

其他元字符

记号说明
^匹配字符串的开始 集合取反
$匹配字符串的结尾
\b匹配单词的边界,单词包括\w 中的内容
()对字符串分组
\数字匹配已保存的子组

核心函数

核心函数说明
re.findall()在字符串中查找正则表达式的所有(非覆盖)出现;返回一个匹配对象的列表。
re.match()尝试用正则表达式模式从字符串的开头匹配 如果匹配成功,则返回一个匹配对象 否则返回None
re.search()在字符串中查找正则表达式模式的第一次出现 如果匹配成,则返回一个匹配对象 否则返回None
re.group()使用match 或者search 匹配成功后,返回的匹配对象 可以通过group() 方法获取得匹配内容
re.finditer()和findall() 函数有相同的功能,但返回的不是列表而是迭代器 对于每个匹配,该迭代器返回一个匹配对象
re.split()根据正则表达式中的分隔符把字符分割为一个列表,并返回成功匹配的列表字符串也有类似的方法,但是正则表达式更加灵活
re.sub()把字符串中所有匹配正则表达式的地方换成新的字符串

贪婪匹配和非贪婪匹配

贪婪匹配:尽可能匹配多的字符

非贪婪匹配:尽可能匹配少的字符

如下面的代码,要匹配中间的数字,但是他的输出结果只有7,这是因为在贪婪匹配下,(\d+)前的.*会尽可能匹配多的字符,而(\d+)是匹配任意个数字,没有说具体几个数字,这样他就会匹配将llo 123456都匹配,只留一个数字给(\d+)匹配,这样(\d+)就只能匹配到7

import res='hello 1234567 world'
res = re.match('he.*(\d+).*rld$',s)print(res.group(1))

如果要输出1234567,就要将匹配变为非贪婪匹配,在.*后加一个?,匹配尽可能少的字符,这样一来,.*?匹配到llo后面的空格后就不再匹配,而是交给(\d+)匹配,这样就能匹配到1234567了:

import res='hello 1234567 world'
res = re.match('he.*?(\d+).*rld$',s)print(res.group(1))

正则练习

Python环境下引入re模块,定义一个字符串:

>>> import re
>>> s="I say food not Good"

匹配ood字符串:

在这里插入图片描述

匹配出food,Good:
在这里插入图片描述

贪婪匹配:
在这里插入图片描述

非贪婪匹配:

在这里插入图片描述

用点和中括号匹配:

在这里插入图片描述

http://www.lryc.cn/news/177111.html

相关文章:

  • MissionPlanner编译过程
  • SpringBoot 员工管理---通用模板 ---苍穹外卖day2
  • 可信执行环境(Tee)入门综述
  • Java浮点运算为什么不精确
  • linux使用操作[1]
  • 权限提升Linux篇
  • 影刀自动化采集底层逻辑
  • swiper使用
  • 基于遗传算法解决的多仓库多旅行推销员问题(Matlab代码实现)
  • 微信小程序 工具使用(HBuilderX)
  • 设计模式:观察者模式(C++实现)
  • 【前端打怪升级日志之微前端框架篇】微前端qiankun框架子应用间跳转方法
  • C语言中的typedef struct用法
  • 司徒理财:9.27黄金原油日内多空走势行情操作建议
  • C++设计模式(Design Patterns)
  • vue点击按钮收缩菜单
  • Vue 防止忘记的命令
  • APACHE NIFI学习之—RouteOnContent
  • 【C语言】【结构体的内存对齐】计算结构体内存大小,有图解
  • Intel 700 800系网卡升级支持WOL UEFI PXE方法
  • vue3 - 使用 xlsx 库将数据导出到 Excel 文件
  • 机器学习,深度学习
  • 【性能测试】jmeter连接数据库jdbc
  • 蓝桥等考Python组别二级007
  • Java如何解决浮点数计算不精确问题
  • 一图读懂「五度易链」企业创新服务解决方案,打造卓越营商环境!
  • 软件工程 第一次随堂练习
  • 在 Esp32 摄像头上实现边缘脉冲 FOMO 物体检测
  • crypto:RSA
  • APP产品经理岗位的具体内容(合集)