正则表达式新解

文章目录

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

是什么?

正则表达式(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.rhkb.cn/news/142852.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

案例题概述

案例题概述 考点 考点 新教材的新增考点 第一题必做,之后是4选2 感觉都是记忆的,课件完整一些,之后以看课件为主了,不在做详细笔记了

IDEA中如何查看自己的SpringBoot的版本

直接输入代码执行: public class App {public static void main(String[] args) {String springVersion SpringVersion.getVersion();String springBootVersion SpringBootVersion.getVersion();System.out.println("Spring版本:"springVersion"\…

java常用API(Math,System,Runtime)

Math Math的常用方法 package myMath;public class myMath {public static void main(String[] args) {System.out.println(Math.abs(-99));//这个表示取绝对值的 打印结果为99//但是他有个bug.int最大取值范围是-2,147,483,648 到2,147,483,647System.out.println(Math.abs(-…

Linux -- 进程间通信之匿名管道

博客中涉及代码已全部上传至Gitee,有需要请自行下载 目录 前言通信基础管道 匿名管道第一步:创建管道第二步:创建子进程第三步:开始通信第四步:结束通信 匿名管道通信代码实现四种特殊情景 基于匿名管道的多进程控制对…

什么是城市坐标系,与国家坐标系的区别?

文章目录 先说国家坐标系什么是城市坐标系城市坐标系建设规范常见的城市坐标系 先说国家坐标系 先1954年我国建立了第一代国家大地坐标系统,即北京54坐标系,英文缩写BJ54,坐标原点在苏联,椭球参数直接拿苏联的。第一代坐标系的椭…

【C++杂货铺】一颗具有搜索功能的二叉树

文章目录 一、二叉搜索树概念二、二叉搜索树的操作2.1 二叉搜索树的查找2.2 二叉搜索树的插入2.3 二叉搜索树的删除 三、二叉搜索树的实现3.1 BinarySearchTreeNode(结点类)3.2 BinarySearchTree(二叉搜索树类)3.2.1 框架3.2.2 in…

Linux系统100条命令:关于Ubuntu和 CentOS 7 相同功能的不同的终端操作命令

安装软件包: Ubuntu:apt-get install package_name CentOS 7:yum install package_name 更新软件包列表: Ubuntu:apt-get update CentOS 7:yum update 卸载软件包: Ubuntu:apt-…

Diffusion Autoencoders: Toward a Meaningful and Decodable Representation

Diffusion Autoencoders: Toward a Meaningful and Decodable Representation (Paper reading) Konpat Preechakul, VISTEC, Thailand, CVPR22 Oral, Cited:117, Code, Paper 1. 前言 扩散概率模型 (DPM) 在图像生成方面取得了显着的质量,可与 GAN 相媲美。但是与…

C++ - 红黑树 介绍 和 实现

前言 前面 学习了 AVL树,AVL树虽然在 查找方面始终拥有 O(log N )的极高效率,但是,AVL 树在插入 ,删除等等 修改的操作当中非常的麻烦,尤其是 删除操作,在实现当中细节非常多,在实现上非常难掌控…

如何套用模板制作大屏?

在山海鲸可视化的资源中心里内置了大量的二维、三维大屏模板,大家可以根据需要找到自己想要的模板,然后点击下载直接进行使用。 有需要可自行前往哔哩哔哩账号中观看相关内容的视频教程↓↓↓ 山海鲸可视化的个人空间-山海鲸可视化个人主页-哔哩哔哩视频…

cocos2dx查看版本号的方法

打开文件:项目根目录\frameworks\cocos2d-x\docs\RELEASE_NOTES.md 知道引擎版本号的意义: 1.面试中经常被问到(面试官想知道你会不会查版本号,你会查也不一定会去看,如果你去看了说明你是一个有心人,或者想深入研究下…

Java内存泄漏知识(软引用、弱引用等)

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 未经允许不得转载 目录 一、导读二、概览三、相关知识3.1 内存…

工作中Git管理项目和常见问题处理

工作中Git管理项目和常见问题处理 Git仓库的管理方式为什么会出现无法push到线上处理方法 Git仓库的管理方式 共用统一仓库,不同开发人员使用不同分支 步骤 下载代码 git clone <url>查看分支 git branch创建并切换分支 git checkout -b dev分支名称保持和远程分支一…

计算机视觉与深度学习-图像分割-视觉识别任务03-实例分割-【北邮鲁鹏】

目录 参考定义Mark R-CNN结构思路Mask R-CNN训练阶段使用的Mask样例Mask R-CNN实例分割结果Mask R-CNN检测姿态 参考 论文题目&#xff1a;Mask R-CNN 论文链接&#xff1a;论文下载 论文代码&#xff1a;Facebook代码链接&#xff1b;Tensorflow版本代码链接&#xff1b; K…

微信里怎么添加阅读付费链接

在微信中添加阅读付费链接为主题&#xff0c;首先需要开通微信支付商户号&#xff0c;然后创建自定义菜单&#xff0c;并设置跳转到付费链接的逻辑。以下是详细步骤&#xff1a; 注册并开通微信支付商户号 在微信开放平台上注册并开通微信支付商户号。这一步需要营业执照、法…

出现 conda虚拟环境默认放在C盘 解决方法

目录 1. 问题所示2. 原理分析3. 解决方法3.1 方法一3.2 方法二1. 问题所示 通过conda配置虚拟环境的时候,由于安装在D盘下,但是配置的环境默认都给我放C盘 通过如下命令:conda env list,最后查看该环境的确在C盘下 2. 原理分析 究其根本原因,这是因为默认路径没有足够的…

go sync.Map包装过的对象nil值的判断

被sync.Map包装过的nil 对象&#xff0c;是不能直接用if xxx nil的方式来判断的 func testnil() *interface{} {return nil }func main() {var ptr *interface{}test : testnil()//p &Person{}fmt.Printf("ptr 的值为 : %v\n", ptr)fmt.Printf("ptr 的值…

uni-app:实现元素在屏幕中的居中(绝对定位absolute)

一、实现水平居中 效果 代码 <template><view><view class"center">我需要居中</view></view> </template><style>.center {position: absolute;left:50%;transform: translateX(-50%);border:1px solid black;} </s…

20个提升效率的JS简写技巧,告别屎山!

JavaScript 中有很多简写技巧&#xff0c;可以缩短代码长度、减少冗余&#xff0c;并且提高代码的可读性和可维护性。本文将介绍 20 个提升效率的 JS 简写技巧&#xff0c;助你告别屎山&#xff0c;轻松编写优雅的代码&#xff01; 移除数组假值 可以使用 filter() 结合 Bool…

智能机器学习:人工智能的下一个巨大飞跃

文章目录 第1节&#xff1a;智能机器学习的背景1.1 传统机器学习1.2 人工智能 第2节&#xff1a;智能机器学习的定义2.1 智能机器学习的原理2.1.1 自主学习2.1.2 强化学习2.1.3 自适应性 2.2 智能机器学习的关键技术2.2.1 深度学习2.2.2 强化学习算法2.2.3 自然语言处理&#x…