9月11日学习内容整理:正则表达式,re模块

一、正则表达式:正则是很大的一个知识点,不会仅仅是下面这些东西

1、概念:正则表达式就是一种对字符串匹配的规则,注意是只对字符串,正则表达式和python没啥关系,

2、表达式:

(1)字符集:用中括号表示,例如[1-9],[012345],[a-z1-9],[A-z]

字符集代表的是一个字符的匹配规则,不需写标点符号,可以多种规则连着写,按从小到大的排列(ascii值,所以大写A到小写z也可以,但一般不这么写)

(2)元字符

.     匹配除换行符以外的任意字符

\w    匹配数字字母和下划线的字符    大写代表非数字字母下划线的字符

\s  匹配空白符                大写代表非空白符的字符

\d    匹配数字   大写代表非数字的字符

^      匹配字符串的开始,写在开头     [ ^ ]  若写在字符集当中就代表除字符集中以外所有的字符 

$     匹配字符串的结尾,写在最后

(3)量词

*  零次或多次

+ 一次或多次

?零次或一次

{1}只有1次

{2,10}2到10次

{4,}4次或多次

规则:尽量匹配多次;量词只能操作前一个字符的次数。也就是说不会只对一个字符进行匹配就完了,而是将指定次数的匹配当作一次整体的匹配

(4)贪婪匹配:使用量词匹配,每次尽量匹配多次

    非贪婪匹配:在量词后加?,就是尽量匹配最少次

(5)分组:小括号;可以把一组字符当作一个整体,匹配这个整体也可以使用量词使这个整体重复匹配;对于一条匹配的正则,只对需要的内容进行分组

(6)转义符:\ 对于一些有特殊意义的字符用\可以表示本身,在python中用r转义

补充:

1、回溯算法:例如<.*?>  会一直匹配,当遇到>后不会停止会继续匹配,待匹配到最后还是没有>就会回头回到之前的>

2、.*?字符   取前面任意长度的字符,直到字符出现

二、re模块

1、和正则的关系:python中的re模块就是为正则服务的

2、方法

(1)findall(正则,要匹配的字符串)  输出的列表类型,元素为每一个匹配的字符串;若没有匹配上,就输出空列表

(2)search(正则,要匹配的字符串) 输出的是一种对象并不显示匹配的字符串,通常用group()来显示匹配上的字符串

例如:

import re

ret =  search(正则,字符串)

if   ret   :     若没有匹配上,则输出None

  print(ret.group() )   注意这里group只能显示第一个匹配上的字符串,若本身字符串很长有多个匹配项,但是group也只能显示出第一个

(3)match()  用法和search一样,但是,不同的是match会自动在正则前面加上^,代表以什么开头,所以group输出的值只能是字符串开始匹配上的字符

 

(4)分割 split(正则[ab],字符串)按照正则的规则依次分割,例如先匹配a后分割得到的结果再按b分割,最后输出的是列表

(5)替换 sub(正则,要替换的内容,字符串,次数) 按照正则匹配上的内容换成   要替换的内容   再输出替换好的字符串。次数是指替换几次,也就是替换前几个

(6)sunb()会直接显示输出替换的次数

 

(7)obj =  re.compile (正则)   将正则表达式编译为正则表达式对象,这样可以用来对多个字符串进行相同正则的匹配

(8)finditer(正则,字符串)  会直接输出一个迭代器,可循环取值,取值时要用group()

三、进阶知识

1、findall优先级查询:会优先显示分组即小括号里的匹配内容,而自动不显示括号外的匹配内容

解决办法:(?:.........      )   只要在小括号里的开头加上问号和冒号,注意一定不要分开

2、split 优先级查询:若在正则表达式两边加了括号,则分割时还会显示出原本要匹配的内容,例如上一节中的(4)给[ab]加括号([ab]),这样的话分割出来的内容也会有a和b

3、匹配标签:在search方法中,在要选择输出的正则规则前面加上?P<名字>,然后把正则规则用小括号括起来

import re
ret=re.search('<\w+>(?P<name>\w+)<\w+>','<h1>hello<h1>')
print(ret.group('name'))
匹配标签

 若遇到字符串有重复的内容使我们需要的,不能每一次都写一个新的名字,只要在需要的正则位置两边加上括号,开头写?P=名字,而且括号里的正则也不需要留着

import re
ret=re.search('<(?P<name>\w+)>\w+<(?P=name)>','<h1>hello<h1>')
print(ret.group('name'))
匹配标签2

 

转载于:https://www.cnblogs.com/wanghl1011/articles/7505429.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/280455.shtml

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

相关文章

MongoDB的安装与使用

MongoDB是一款NoSql数据库。NoSql数据库叫非关系型数据库&#xff0c;NoSql的全名Not only sql。是为了解决高并发、高可用、高可扩展&#xff0c;以及大数据存储等一系列问题而产生的数据库解决方案。NoSql&#xff0c;它不能替代关系型数据库&#xff0c;只能作为关系型数据库…

linux 基准测试_如何对Linux系统进行基准测试:3个开源基准测试工具

linux 基准测试Linux’s command-line utilities can do anything, including perform benchmarks – but using a dedicated benchmarking program is a simpler and more foolproof process. These utilities allow you to perform reproducible tests across different syst…

.NET 7 新增的 IParsable 接口介绍

.NET 7 是一个新版本的 .NET&#xff0c;它新增了一个名为 IParsable 的接口。这个接口可以帮助开发人员更容易地在代码中解析字符串。IParsable 接口包含两个方法&#xff1a;Parse 和 TryParse。Parse 方法用于将一个字符串解析为指定类型的值。如果解析失败&#xff0c;则会…

spring+springMvc+struts的SSH框架整合

1.建立一个web项目 2.导入SSH框架所需jar包 3.配置web.xml文件 <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xmlns"http://java.sun.com/xml/ns/javaee" xsi:sc…

听说这个语言认知服务又出新功能了?

点击上方蓝字关注我们&#xff08;本文阅读时间&#xff1a;7分钟)语言是人类智能发展的基石。鉴于语言拥有普遍性&#xff0c;几乎没有特定的技术或 AI 技术得以颠覆整个社会。微软的使命是赋能地球上的每个人和每个组织&#xff0c;帮助他们取得更多成就。立足于该使命&#…

自定义异常最佳实践_播放,自定义和组织媒体的最佳文章

自定义异常最佳实践Computers today are used for much more than generating documents, writing and receiving email, and surfing the web. We also use them to listen to music, watch movies and TV shows, and to transfer media to and from mobile devices. 如今&…

CSS中的路径裁剪样式clip-path

前面的话 CSS借鉴了SVG裁剪的概念&#xff0c;设置了clip-path样式&#xff0c;本文将详细介绍路径裁剪clip-path 概述 clip-path属性可以防止部分元素通过定义的剪切区域来显示&#xff0c;仅通过显示的特殊区域。剪切区域是被URL定义的路径代替行内或者外部svg&#xff0c;或…

macos mojave_如何修复macOS Mojave上的模糊字体(使用亚像素抗锯齿)

macos mojaveApple’s macOS Mojave disables subpixel antialiasing, also known as font smoothing, by default. On a MacBook Air or a desktop Mac hooked up to a non-Retina display, upgrading will make your fonts look worse. 苹果的macOS Mojave默认情况下禁用子像…

一个变量命名神器:支持中文转变量名

变量命名的规范&#xff0c;对于我们编程&#xff0c;大家都知道是非常重要的&#xff0c;上次给大家推荐过一个命名辅助工具《程序员还在为变量取名苦恼&#xff0c;那是因为你不知道&#xff0c;这个变量命名神器》&#xff0c;但大家一致反馈存在2个问题&#xff1a;1、网速…

1.操作系统概述

2019独角兽企业重金招聘Python工程师标准>>> 操作系统的发展过程 无操作系统的计算机系统单道批处理系统&#xff08;50年代&#xff0c;系统资源利用率低&#xff09;多道批处理系统&#xff08;60年代&#xff09;分时系统&#xff08;70年代&#xff09;实时系统…

测听hl和nhl的区别_播放NHL曲棍球的最便宜方法(无电缆)

测听hl和nhl的区别If you’re like me, you watch hockey, and…basically no other sports. You also, like me, would like to skip the cable subscription. So what’s the cheapest way to watch NHL hockey online so you can cut the cord? 如果您像我一样&#xff0c;…

使用Java实现K-Means聚类算法

2019独角兽企业重金招聘Python工程师标准>>> 关于K-Means介绍很多&#xff0c;还不清楚可以查一些相关资料。 个人对其实现步骤简单总结为4步: 1.选出k值,随机出k个起始质心点。 2.分别计算每个点和k个起始质点之间的距离,就近归类。 3.最终中心点集可以划分为…

在PowerShell中显示高级进度条

如果你需要编写一些PowerShell脚本&#xff0c;尤其在处理一些相对复杂的任务时&#xff0c;你可能希望添加进度条的功能&#xff0c;以便随时可以了解进展情况。Write-Progress 这个命令可以帮助你完成简单的需求&#xff0c;请参考官方文档即可&#xff0c;但下图一个示例&am…

当检测到运动时如何自动打开门灯

If it’s dark out and someone comes to your door, you probably can’t see them unless your porch light is on. Furthermore, if a potential burglar approaches your front door, a motion light can help scare them away. 如果天黑了&#xff0c;有人进了您的门&…

在阿里,我们如何管理测试环境

为什么80%的码农都做不了架构师&#xff1f;>>> 作者&#xff1a;林帆&#xff08;花名金戟&#xff09;&#xff0c;阿里巴巴研发效能部技术专家 相关阅读&#xff1a;在阿里&#xff0c;我们如何管理代码分支 前言 阿里的许多实践看似简单&#xff0c;背后却蕴涵…

数据库_7_SQL基本操作——表操作

SQL基本操作——表操作 建表的过程就是声明列的过程。 表与字段是密不可分的。 一、新增数据表 create table [if not exists] 表名( 字段名字 数据类型, 字段名字 数据类型 -- 最后一行不需要逗号 )[表选项];if not exists:如果表名不存在&#xff0c;那么就创建&#xff0c;…

EXT.NET 更改lable和Text的颜色

2019独角兽企业重金招聘Python工程师标准>>> &#xfeff;&#xfeff; <ext:TextField ID"TextField1" " runat"server" FieldLabel"编号" LabelWidth"60" LabelAlign"Left" LabelStyle"color:red…

ubuntu系统备份和还原_如何使用Aptik在Ubuntu中备份和还原您的应用程序和PPA

ubuntu系统备份和还原If you need to reinstall Ubuntu or if you just want to install a new version from scratch, wouldn’t it be useful to have an easy way to reinstall all your apps and settings? You can easily accomplish this using a free tool called Apti…

AppDomainManager后门的实现思路

本文讲的是AppDomainManager后门的实现思路&#xff0c;0x00 前言从Casey SmithsubTee学到的一个技巧&#xff1a;针对.Net程序&#xff0c;通过修改AppDomainManager能够劫持.Net程序的启动过程。 如果劫持了系统常见.Net程序如powershell.exe的启动过程&#xff0c;向其添加…

所有内耗,都有解药。

你是否常常会有这种感觉&#xff1a;刚开始接手一件事情&#xff0c;脑海中已经幻想出无数个会发生的问题&#xff0c;心里也已笃定自己做不好&#xff1b;即使别人不经意的一句话&#xff0c;也会浮想一番&#xff0c;最终陷入自我怀疑&#xff1b;随便看到点什么&#xff0c;…