正则总结(Python)

正则大家都不陌生,工作中一定会接触到。最近在Python中用的了正则,所以顺便整理一下。

一、re模块的使用

#导入 re模块
import re# 使用match方法进行匹配操作
result = re.match(正则表达式, 要匹配的字符串)# 如果上一步匹配到数据的话,可以使用group方法来提取数据
result.group()

re.match 是用来进行正则匹配检查的方法,如果字符串匹配正则表达式,则match方法返回匹配对象,否则返回None

二、表示字符等

字符功能
.匹配任意一个字符(除了\n)
[]匹配[]中列举的字符
\d匹配数字,也就是0-9
\D匹配非数字
\s匹配空白,即空格、tab键
\S匹配非空白
\w匹配单词字符 即a-z、A-Z、0-9、_
\W匹配非单词字符

 

如果[]里以^开头表示非的意思。

import reret = re.match(".", "M")
print(ret.group())p = "1[345]" # 这个正则也就是匹配13、14、15 这三种情况
result1 = re.match(p, '12') #不匹配
print(result1)
result2 = re.match(p, '13') # 匹配
print(result2)rP = "1[^345]" # [] 里面有个 ^ 表示取反的意思也就是不是这三个数的情况
result1 = re.match(rP, '12') #匹配
print(result1)
result2 = re.match(rP, '13') #不匹配
print(result2)print("----------------------------------------------")result = re.match('\d', "13") # 数字
print(result)result = re.match("嫦娥\d号","嫦娥3号发射成功")
print(result)

三、原始字符

就是在正则里面有可能出现转义的情况。在正则表达式里面使用“\”来表示转义,比如你要匹配“\”,这个时候正则需要“\\”,有时候这个斜杠可能遗漏等问题。Python里的原生字符串很好地解决了这个问题,有了原始字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。

import re
#转义
result = re.match('\\\\n\w', '\\nab')
print(result)# 原始字符
s = r'\nabc'
print(s)result = re.match(r'\\n\w', r'\nab')
print(result)

四、表示数量

字符功能
*匹配前一个字符0次或者无限次,即可有可无
+匹配前一个字符1次或者无限次,即至少1次
?匹配前一个字符出现一次或者0次,即要么1次,要么没有
{m}匹配前一个字符出现m次
{m,}匹配前一个字符至少出现m次
{m,n}匹配前一个字符出现m到n次

五、表示边界

字符功能
^匹配字符串开头
$匹配字符串结尾
\b匹配一个单词的边界
\B匹配非单词边界

说到开头和结尾想到vi编辑器里面鼠标移动到开头的位置就是 ^, 光标移动到结尾的位置就是$

import re# ^ 开始
# $ 末尾 , 其实在 vi 编辑器里面光标去头还是未也是这样的
result = re.match(r'^\w+\bve\b', 'hover')
print(result)result = re.match(r'^\w+\bve\b', 'ho ve r')
print(result)
# \b 不能匹配空格
result = re.match(r'^\w+\sve\b', 'ho ve r')
print(result)result = re.match(r'^.+ve\b', 'ho ve r')
print(result)

六、匹配分组

字符功能
|匹配左右任意一个表达式
(ab)将括号中字符作为一个分组
\num引用分组num匹配到字符串
(?P<name>)分组起别名
(?P=name)引用别名为name分组匹配到字符串

比如现在要表示0-100之间的数字?

import re
#正则表示 0 - 100
result = re.match(r"[1-9]\d?$|0|100", '0')
print(result)result = re.match(r"[1-9]?\d?$|100", '0')
print(result)

假设现在要匹配“<html><h1>helo world</h1></html>” 这样的字符?

import re
#<html><h1>helo world</h1></html>
# \1 \2 提取的位置
result = re.match(r"<(.+)><(.+)>.+</\2></\1>", '<html><h1>helo world</h1></html>')
print(result)
result = re.match(r"<(.+)><(.+)>.+</\2></\1>", '<html><h1>helo world</h1></h1>') # 匹配不成功
print(result)

另外如果标号太麻烦的话,可以分组起名来写。

import re
# 分组起名
result = re.match(r"<(?P<Key1>.+)><(?P<Key2>.+)>.+</(?P=Key2)></(?P=Key1)>", '<html><h1>helo world</h1></html>')
print(result)

七、re的高级用法,search、findall、sub

import reresult = re.search(r"\d", 'asdf0')
print(result)result = re.search(r"^\d$", 'asdf0')
print(result)# search 只能找到一个
s = 'mar</h1>hellow od</h1>'
result = re.search(r'\w+</h1>', s)
print(result)# findall 可以找到所有的
s = 'mar</h1>hellow lod</h1>'
result = re.findall(r'\w+</h1>', s)
print(result)#sub 将匹配到的数据进行替换# ret = re.sub(r"要替换的正则", '要替换的值', "要修改的字符串")# 把 t 中的 php 都换成 python
t = "c++ php python shell window php python"
ret = re.sub(r"php", 'python', t)
print(ret)print("---------------------------------------------------------------------------------")
# 现在要有目的的去替换
def replace(result):r = int(result.group()) + 20# 在原有的值上面加 20 return str(r)ret = re.sub(r'\d+', replace, 'python = 100, php = 10')
print(ret)

八、Python贪婪和非贪婪

Python中的数量词默认的贪婪模式,总是尝试匹配尽可能多的字符;非贪婪则相反,总是尝试匹配尽可能少的字符。在"*","?","+","{m,n}"后面加上?,使贪婪变成非贪婪。比如看下面这个例子。

import res = "This is a number 234-235-22-423"
r = re.match(".+(\d+-\d+-\d+-\d+)",s)
print(r.group(1))s = "This is a number 234-235-22-423"
r = re.match("(.+)(\d+-\d+-\d+-\d+)",s) #前面的(.+) 是贪婪的,尽可能匹配多的
print(r.groups())#在"*","?","+","{m,n}"后面加上?,使贪婪变成非贪婪。
s = "This is a number 234-235-22-423"
r = re.match("(.+?)(\d+-\d+-\d+-\d+)",s) #前面的(.+) 是贪婪的,尽可能匹配多的
print(r.groups())

 

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

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

相关文章

怎样查看优酷视频播放记录?

当我们在优酷上观看视频时&#xff0c;有时可能由于没空并不能一次性看完;或者&#xff0c;对于一些视频合集&#xff0c;也可能没有兴趣将其中的所有剧集挨个看遍&#xff0c;通常只是挑了那么一两个尝了尝鲜……这样一来&#xff0c;当下次来到优酷想接着播放时&#xff0c;对…

python二分法查找

常见的搜索方法&#xff1a;顺序查找、二分法查找、二叉树查找、哈希查找。 二分法查找 二分查找又称折半查找&#xff0c;优点是比较次数少&#xff0c;查找速度快&#xff0c;平均性能好&#xff1b;其缺点是要求待查表为有序表&#xff0c;且插入删除困难。因此&#xff0…

如何在搜狗浏览器更换页面字体?搜狗浏览器更换页面字体的方法

搜狗浏览器是一款提供给用户更好体验的浏览器&#xff0c;该软件拥有众多好用的功能&#xff0c;给用户带来更便利的服务&#xff0c;但是有时候又觉得太单调了&#xff0c;想换个字体&#xff0c;体验下不一样的感受&#xff0c;又不知道在哪里更换&#xff0c;接下来&#xf…

Python 二叉树实现

二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”&#xff08;left subtree&#xff09;和“右子树”&#xff08;right subtree&#xff09; 二叉树的节点表示以及树的创建 1、通过使用Node类中定义三个属性&#xff0c;分别为elem本身的值&#xff0c;还…

谷歌浏览器自动填充功能怎么开启?自动填充功能开启方法

为了避免用户在登录同一网站时频频输入账号、密码的现象&#xff0c;谷歌在自家的Chrome浏览器中贴心的加入了“自动填充功能”。那么&#xff0c;谷歌浏览器自动填充功能要怎么开启呢?不清楚操作方法的朋友&#xff0c;不妨收藏学习一下。 方法步骤 在Chrome地址栏输入“ch…

Python二叉树遍历

树的遍历是树的一种重要的运算。所谓遍历是指对树中所有结点的信息的访问&#xff0c;即依次对树中每个结点访问一次且仅访问一次&#xff0c;我们把这种对所有节点的访问称为遍历&#xff08;traversal&#xff09;。那么树的两种重要的遍历模式是深度优先遍历和广度优先遍历,…

Win11开始菜单怎么从中间移到左边?

相信不少用户都已经安装上了Windows11系统&#xff0c;但是有许多用户针对Windows11的开始菜单在中间非常的不习惯&#xff0c;想要把开始菜单移动到左边&#xff0c;像Win10系统那样。那么具体要怎么操作呢?下面小编就带着大家一起看看吧! 操作方法&#xff1a; 1、首先&am…

【Python学习笔记】Python深拷贝和浅拷贝

Python中copy模块里面常用的两个方法copy.copy() 和copy.deepcopy()也就是浅拷贝和深拷贝 1、copy.deepcopy() 深拷贝&#xff0c;是对于一个对象所有层次的拷贝。 2、copy.copy()浅拷贝&#xff0c;一般来说是对最顶层对象的拷贝。另外浅拷贝对不可变类型&#xff08;如&…

如何为火狐浏览器添加附加组件?火狐浏览器附加组件管理器使用教程

作为一款开放源码的浏览器产品&#xff0c;火狐在国内也不乏粉丝。当然&#xff0c;这其中也有火狐浏览器上的插件功能的部分功劳&#xff0c;毕竟其要优于许多同类产品!那么&#xff0c;该如何为火狐浏览器添加附加组件呢?不清楚操作方法的朋友&#xff0c;还不赶紧来了解一下…

Python装饰器(一)

要学习装饰器&#xff0c;首先要知道闭包的东西。不过这里不再说闭包的东西了。 我们假设一个场景&#xff1a;假如在公司有多个开发部门&#xff0c;A、B....。现在A部门开发出了一个功能&#xff0c;然后其他部门去调用A部门开发的功能。 比如: 如下f1、f2...&#xff0c;是…

怎么在QQ浏览器上使用微信聊天?

操作步骤&#xff1a; 1、启动qq浏览器。在qq浏览器界面中的插件栏中&#xff0c;会自动出现微信图标&#xff0c;浏览器自带了微信网页版的插件; 怎么在QQ浏览器上使用微信聊天&#xff1f; 2、点击该图标&#xff0c;然后会弹出一个二维码的窗口&#xff0c;拿出您的手机&…

搜狗输入法怎么清除输入记忆 搜狗输入法清除输入记忆方法

记忆功能清除方法如下&#xff1a; 1、打开搜狗输入法; 搜狗输入法怎么清除输入记忆 搜狗输入法清除输入记忆方法 2、进入搜狗主界面&#xff0c;点击右下角“我的”进入界面; 搜狗输入法怎么清除输入记忆 搜狗输入法清除输入记忆方法 3、进入“我的”界面&#xff0c;点击…

Python装饰器(二)

想再说一下装饰器的使用和原理。 之前已经说了装饰器的概念&#xff0c;和语法&#xff0c;这里想再进一步说一下几个装饰器的例子。 例子一&#xff1a; def makBlod(fn):def wrappen():return "<b>" fn() "</b>"return wrappendef makI…

Win11任务栏透明度怎么调整?Win11任务栏透明度设置教程

许多小伙伴最近在使用Windows11的时候&#xff0c;总觉得Windows11的任务栏的颜色非常的难堪&#xff0c;想要自己把任务栏调整到透明的&#xff0c;那么具体我们要怎么调整Windows11任务栏透明度呢?下面小编就为大家介绍一下吧! 操作方法&#xff1a; 1、首先&#xff0c;我…

谷歌浏览器下载的文件保存在哪里?

许多人在使用谷歌浏览器上网时都会下载一些好看的电影、电视、小说或可玩性较高的游戏&#xff0c;但在完成下载后&#xff0c;却不清楚自己下载的东西放在了哪里!这不禁令人更好奇&#xff0c;谷歌浏览器下载的文件保存在哪里?下面让我们来了解一下。 方法步骤 打开Chrome浏…

Chrome浏览器隐藏扩展插件图标

隐藏Chrome浏览器扩展插件的图标。 隐藏之后 把鼠标移动到 上面显示那个红色的位置就可以拖动鼠标&#xff0c;然后就可以隐藏了。

如何设置允许PP视频访问相机

下面和大家分享一下如何设置允许PP视频访问相机&#xff0c;希望可以帮助到有需要的朋友。 如何设置允许PP视频访问相机 1、打开pp视频。见下图 如何设置允许PP视频访问相机 2、点击右下角我的。见下图 如何设置允许PP视频访问相机 3、点击打开设置。见下图 如何设置允许…

Ubuntu下virtualenv 安装

1、安装 vitrualenv。 sudo pip install virtualenv 2、在 Ubuntu 中以及其衍生系统中执行如下命令安装。 sudo apt-get install python-virtualenv 3、找个存放目录&#xff0c;创建虚拟环境。 virtualenv my_env 这个时候里面的虚拟环境里面的python版本是主机里面pyth…

如何更换里讯浏览器的皮肤?里讯浏览器更换皮肤的方法

里讯浏览器是一款极速、纯净的浏览器&#xff0c;软件拥有多种颜色的皮肤&#xff0c;可以根据个人的喜好更换自己喜欢的颜色&#xff0c;那么&#xff0c;怎么进行换肤呢?下面就由小编来告诉大家里讯浏览器换肤的方法。 方法步骤 1、打开里讯浏览器软件。 如何更换里讯浏览…

urllib2.URLError: urlopen error [Errno 111] Connection refused

记录个还没解决的问题。下面爬虫代码是可以执行的&#xff0c;但是在我的Ubuntu的虚拟中刚开始是可以运行的&#xff0c;但是&#xff0c;后来不知道改了什么东西&#xff0c;用urllib2写的爬虫和用scrapy 的爬虫代码都不能运行了&#xff01;&#xff01;。 import urllib2 i…