【正则表达式】正则表达式常见匹配模式
目录
- 常见匹配模式
- re.match 从字符串的起始位置匹配一个模式
- 泛匹配
- 匹配目标
- 贪婪匹配
- 非贪婪匹配
- 匹配模式
- 转义
- re.search 扫描整个字符串并返回第一个成功的匹配
- re.findall 以列表形式返回全部能匹配的子串
- re.sub 替换字符串中每一个匹配的子串后返回替换后的字符串
- re.compile 将正则字符串编译成正则表达式对象
常见匹配模式
模式 | 描述 |
---|---|
\w | 匹配字母数字及下划线 |
\W | 匹配非字母数字下划线 |
\s | 匹配任意空白字符,等价于 [\t\n\r\f]. |
\S | 匹配任意非空字符 |
\d | 匹配任意数字,等价于 [0-9] |
\D | 匹配任意非数字 |
\A | 匹配字符串开始 |
\Z | 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串 |
\z | 匹配字符串结束 |
\G | 匹配最后匹配完成的位置 |
\n | 匹配一个换行符 |
\t | 匹配一个制表符 |
^ | 匹配字符串的开头 |
$ | 匹配字符串的末尾。 |
. | 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。 |
[…] | 用来表示一组字符,单独列出:[amk] 匹配 ‘a’,‘m’或’k’ |
[^…] | 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。 |
* | 匹配0个或多个的表达式。 |
+ | 匹配1个或多个的表达式。 |
? | 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式 |
{n} | 精确匹配n个前面表达式。 |
{n, m} | 匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式 |
a|b | 匹配a或b |
( ) | 匹配括号内的表达式,也表示一个组 |
re.match 从字符串的起始位置匹配一个模式
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。总结:尽量使用泛匹配、使用括号得到匹配目标、尽量使用非贪婪模式、有换行符就用re.S
泛匹配
import recontent = 'Hello 123 4567 World_This is a Regex Demo'
result = re.match('^Hello.*Demo$', content)
print(result)
print(result.group())
print(result.span())<re.Match object; span=(0, 41), match='Hello 123 4567 World_This is a Regex Demo'>
Hello 123 4567 World_This is a Regex Demo
(0, 41)
匹配目标
import recontent = 'Hello 1234567 World_This is a Regex Demo'
result = re.match('^Hello\s(\d+)\sWorld.*Demo$', content)
print(result)
print(result.group(1))
print(result.span())<re.Match object; span=(0, 40), match='Hello 1234567 World_This is a Regex Demo'>
1234567
(0, 40)
贪婪匹配
import recontent = 'Hello 1234567 World_This is a Regex Demo'
result = re.match('^He.*(\d+).*Demo$', content)
print(result)
print(result.group(1))<re.Match object; span=(0, 40), match='Hello 1234567 World_This is a Regex Demo'>
7
非贪婪匹配
import recontent = 'Hello 1234567 World_This is a Regex Demo'
result = re.match('^He.*?(\d+).*Demo$', content)
print(result)
print(result.group(1))<_sre.SRE_Match object; span=(0, 40), match='Hello 1234567 World_This is a Regex Demo'>
1234567
匹配模式
import recontent = '''Hello 1234567 World_This
is a Regex Demo
'''
result = re.match('^He.*?(\d+).*?Demo$', content, re.S) # 可以匹配到换行
print(result.group(1))1234567
转义
import recontent = 'price is $5.00'
result = re.match('price is \$5\.00', content)
print(result)<re.Match object; span=(0, 14), match='price is $5.00'>
re.search 扫描整个字符串并返回第一个成功的匹配
re.search 扫描整个字符串并返回第一个成功的匹配。
import re
content = 'Extra stings Hello 1234567 World_This is a Regex Demo Extra stings'
result = re.match('Hello.*?(\d+).*?Demo', content)
print(result) # None# 总结:为匹配方便,能用search就不用match
import re
content = 'Extra stings Hello 1234567 World_This is a Regex Demo Extra stings'
result = re.search('Hello.*?(\d+).*?Demo', content)
print(result)
print(result.group(1))<_sre.SRE_Match object; span=(13, 53), match='Hello 1234567 World_This is a Regex Demo'>
1234567
re.findall 以列表形式返回全部能匹配的子串
搜索字符串,以列表形式返回全部能匹配的子串。
import rehtml = '''<div id="songs-list"><h2 class="title">经典老歌</h2><p class="introduction">经典老歌列表</p><ul id="list" class="list-group"><li data-view="2">一路上有你</li><li data-view="7"><a href="/2.mp3" singer="任贤齐">沧海一声笑</a></li><li data-view="4" class="active"><a href="/3.mp3" singer="齐秦">往事随风</a></li><li data-view="6"><a href="/4.mp3" singer="beyond">光辉岁月</a></li><li data-view="5"><a href="/5.mp3" singer="陈慧琳">记事本</a></li><li data-view="5"><a href="/6.mp3" singer="邓丽君">但愿人长久</a></li></ul>
</div>'''
results = re.findall('<li.*?>\s*?(<a.*?>)?(\w+)(</a>)?\s*?</li>', html, re.S)
print(results)
for result in results:print(result[1])[('', '一路上有你', ''), ('<a href="/2.mp3" singer="任贤齐">', '沧海一声笑', '</a>'), ('<a href="/3.mp3" singer="齐秦">', '往事随风', '</a>'), ('<a href="/4.mp3" singer="beyond">', '光辉岁月', '</a>'), ('<a href="/5.mp3" singer="陈慧琳">', '记事本', '</a>'), ('<a href="/6.mp3" singer="邓丽君">', '但愿人长久', '</a>')]
一路上有你
沧海一声笑
往事随风
光辉岁月
记事本
但愿人长久
re.sub 替换字符串中每一个匹配的子串后返回替换后的字符串
替换字符串中每一个匹配的子串后返回替换后的字符串。
import recontent = 'Extra stings Hello 1234567 World_This is a Regex Demo Extra stings'
content = re.sub('\d+', '', content)
print(content)# Extra stings Hello World_This is a Regex Demo Extra stings
import recontent = 'Extra stings Hello 1234567 World_This is a Regex Demo Extra stings'
content = re.sub('(\d+)', r'\1 8910', content)
print(content)# Extra stings Hello 1234567 8910 World_This is a Regex Demo Extra stings
re.compile 将正则字符串编译成正则表达式对象
将正则字符串编译成正则表达式对象
import recontent = '''Hello 1234567 World_This
is a Regex Demo'''
pattern = re.compile('Hello.*Demo', re.S)
result = re.match(pattern, content)
#result = re.match('Hello.*Demo', content, re.S)
print(result)# <re.Match object; span=(0, 40), match='Hello 1234567 World_This\nis a Regex Demo'>
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
【正则表达式】正则表达式常见匹配模式
目录 常见匹配模式re.match 从字符串的起始位置匹配一个模式泛匹配匹配目标贪婪匹配非贪婪匹配匹配模式转义 re.search 扫描整个字符串并返回第一个成功的匹配re.findall 以列表形式返回全部能匹配的子串re.sub 替换字符串中每一个匹配的子串后返回替换后的字符串 re.compile 将…...
![](https://www.ngui.cc/images/no-images.jpg)
Docker搭建RK3568建模环境
推荐:Ubuntu 20.04 版本 Docker加速 # 编辑 Docker 配置文件 $ sudo vim /etc/docker/daemon.json# 加入以下配置项 {"registry-mirrors": ["https://dockerproxy.com","https://hub-mirror.c.163.com","https://mirror.baidu…...
![](https://img-blog.csdnimg.cn/4b655531cd3747bf9a61dbfb248a8c28.png)
TCP/IP基础
前言: TCP/IP协议是计算机网络领域中最基本的协议之一,它被广泛应用于互联网和局域网中,实现了不同类型、不同厂家、运行不同操作系统的计算机之间的相互通信。本文将介绍TCP/IP协议栈的层次结构、各层功能以及数据封装过程,帮助您…...
![](https://www.ngui.cc/images/no-images.jpg)
redis问题:三种集群——主从、哨兵、cluster集群;16384槽等
目录 redis三种集群模式 1、主从 2、哨兵(Sentinel) 3、集群(Cluster) Redis Cluster为什么有16384个槽? 1、8KB的心跳包太大 2、集群的数量不会超过1000。 主从配置和集群配置区别 1、主从 2、集群 redis三种…...
![](https://www.ngui.cc/images/no-images.jpg)
转 股票触发指定价格发送到 企业微信
[Python源码]股票价格监听并推送-代码狗 import aiohttp,asyncio,json,time,re,os,datetimeclass StockListen:def __init__(self):#定义需要监听的股票代码列表self.stock_list [1.600050,1.601988,1.601288,1.601939]#定义预期价格列表self.expect_price [6.6,3.0,2.7,5]#…...
![](https://img-blog.csdnimg.cn/b4887dddf6764e50b52c7120d74ff5c9.png)
Linux修复软RAID
系统应该将mdadm配置成当发生RAID问题时给root用户发送邮件。需要更改/etc/mdadm/mdadm.xonf里的MALLADDR 并用/etc/init.d/mdadm reload重新加载下 查看/proc/mdstat文件 可以看到sdd1被标记F,说明它已经失效 从/dev/md0中移除磁盘sdd1 想要移除磁盘ÿ…...
![](https://img-blog.csdnimg.cn/c0f138cb124f4f598f153a7561af74a6.png)
【嵌入式软件C编程】主函数free子函数malloc地址的两种方式以及注意事项
本文档主要记录嵌入式C语言在子函数中应用malloc函数的方式,在实际项目中内存管理特别重要 一般在主函数中(main)使用malloc函数,然后在通过free函数进行释放内存,但有时候如果必须在子函数长调用malloc函数该怎样进行…...
![](https://img-blog.csdnimg.cn/ccf2d64b57334a959fb81dfdc1f97adc.png)
金融工程学学习笔记第一章
第一章 金融工程概述 什么是金融工程 金融工程的含义 金融工程: 金融工程:一门融现代金融学、数理和工程方法与信息技术与一体的新兴交叉型学科。 工程是指以某种设想的目标为依据,应用有关科学知识和技术手段,通过有组织的一…...
![](https://www.ngui.cc/images/no-images.jpg)
CentOS 7 编译ZooKeeper C客户端
简介 本文主要讲解:Zookeeper C客户端库在Centos 7上的编译,使用的Zookeeper版本为3.4.13。 工具安装 安装ant 和cppunit-devel工具: [rootlocalhost source_code]# yum install -y cppunit-devel 已加载插件:fastestmirror L…...
![](https://www.ngui.cc/images/no-images.jpg)
【2023年数学建模国赛】A题解题思路
2023年数学建模国赛A题解题思路 问题1: 要计算定日镜场的年平均光学效率和年平均输出热功率,以及单位镜面面积年平均输出热功率,我们可以按照以下步骤进行: 遍历所有定日镜的位置,根据给定的定日镜尺寸和安装高度&am…...
![](https://www.ngui.cc/images/no-images.jpg)
人们对区块链的认识开始变得深入和完善,另一条新路径开始衍生
当区块链行业的发展进入到深水区,特别是当有关区块链的狂热与躁动开始退场,仅仅只是主打区块链的概念,而没有找到区块链与现实商业联通的方式和方法,依然成为困扰区块链发展的一大症结。 事实上,从区块链被人们认识…...
![](https://img-blog.csdnimg.cn/9d07a876701a4fec8b2ca7e067b4524c.png)
关于Comparable、Comparator接口返回值决定顺序的问题
Comparable和Comparator接口都是实现集合中元素的比较、排序的,下面先简单介绍下他们的用法。 1. 使用示例 public class Person {private String name;private Integer age;public Person() {}public Person(String name, Integer age) {this.name name;this.ag…...
![](https://img-blog.csdnimg.cn/0bd90bbbb4a74074909c70176cfb862b.png)
js 根据键判断值
最原始的写法: 改进后的写法: const DeviceTypeObj {SO2: "SO<sub>2</sub>",CO: "CO",NO: "NO",NO2: "NO<sub>2</sub>",O3: "O<sub>3</sub>", let value Dev…...
![](https://www.ngui.cc/images/no-images.jpg)
堆排序,以及大顶堆构造过程Java实现
import java.util.Arrays;public class Main {public static void main(String[] args) {int a[] new int[] { 1, 1, 23, 456, 0 };// int a初始化方式int bb[] { 1, 2, 3, 4 };// int c[5] {1,2,34,5,6};//错误int d[] new int[6]; // 初始为0// int e[] new int[5]{1,2,…...
![](https://www.ngui.cc/images/no-images.jpg)
【C++】类的封装 ① ( 类和对象 | 面向对象三大特征 - 封装 继承 多态 | 类的封装引入 )
文章目录 一、类和对象1、类和对象概念2、代码示例 - 定义类和对象 二、类的封装1、面向对象三大特征2、类的封装引入 一、类和对象 1、类和对象概念 " 面向对象编程 " 是一种 " 编程范式 " , 可以适用于所有的 高级语言 , C 也包括在内 ; 面向对象编程 基…...
![](https://img-blog.csdnimg.cn/6c3386979ac2450aaf13673d4fa2825b.png)
Docker原理详细剖析-Namespace
一、简介 docker容器技术从2013年开始火了以后,2014年左右当时有幸在学校能和学院教授一起做些项目以及学习。其中docker技术在当时来说还算是比较新的技术,国内关于这块的资料以及使用也才刚刚开始,讨论docker技术,算是相对时髦的…...
![](https://img-blog.csdnimg.cn/3f90083d2efa4c5b862e99ead76bf3de.png)
sql:SQL优化知识点记录(九)
(1)小表驱动大表 对sql调优的分析: 排序优化: 数据库的连接方式,里面的数据尽量这样连接,尽量选择第一个方式,因为两个表的连接一共建立5次连接,第二个建立1000次连接,从…...
![](https://img-blog.csdnimg.cn/5db0efa6eb4847caa0b2a3b3a8418f6c.png)
【PowerQuery】PowerQuery导入JSON数据
Json数据是目前使用的最为频繁和广泛的一种数据交换格式,JSON的全称为JavaScript Object Notation。Json 主要用于在互联网的消息的数据交换信息传递,他的格式与XML有什么区别呢?为什么不用XML,用Json有啥好处呢?我们接下来讨论下Json相比XML的优势: XML传递的数据过多服…...
![](https://www.ngui.cc/images/no-images.jpg)
bootstrap 主题
颜色值 根据等级 primarysecondarysuccessinfowarningdangerlightdark 根据名字 blackwhiteblueindigopurplepinkredorangeyellowgreentealcyangraygray-darkbrown 好像是self 加的 根据颜色值的转化 var 变量 –bs-**** 比如:–bs-blue,–bs-pri…...
![](https://img-blog.csdnimg.cn/66e525ffd41247949d9790a1364a3d46.png#pic_center)
FPGA 学习笔记:Vivado 工程管理技巧
前言 当前使用 Xilinx 的 FPGA,所以需要熟悉 Xilinx FPGA 的 开发利器 Vivado 的工程管理方法 这里初步列举一些实际 Xilinx FPGA 开发基于 Vivado 的项目使用到的工程的管理技巧 代码管理 做过嵌入式软件或者其他软件开发的工程技术人员,都会想到使用代码管理工具,如 SVN 、…...
![](https://img-blog.csdnimg.cn/img_convert/9175adef535628a1529b5189743dea3b.png)
Java低代码开发:jvs-list(列表引擎)功能(二)字段及样式配置
字段的增减 进入列表页设计器-页表设计界面,点击新增一行、或者删除按钮,可以对字段进行增减操作,如果对于权限的列表页,可以使用批量创建字段的按钮: 字段的批量设置,点击批量添加如下图所示 字段为中文名…...
![](https://img-blog.csdnimg.cn/055ceeb0c06a4ae99c6f41b04d6566b5.png)
【Java】线程都有哪几种状态
文章目录 前言传统线程模型(操作系统)中线程状态Java线程中的状态线程的运行流程 前言 首先我们要知道,在传统(操作系统)的线程模型中线程被分为五种状态,在java线程中,线程被分为六种状态。 …...
![](https://img-blog.csdnimg.cn/img_convert/d6332365a14c224321ead001d7c1b0c8.webp?x-oss-process=image/format,png)
为什么服务端会有那么多的 TimeWait ?
工作中无论是开发环境还是线上环境,我们都出现过大量的 timewait 状态的连接,例如下面这个例子 服务端简单的开辟一个 web server 监听 9966 端口 客户端进行疯狂的请求服务端 瞬间就可以看到咱们服务端的出现大量的 TIME_WAIT 状态的连接 这个时候&…...
![](https://img-blog.csdnimg.cn/img_convert/a377ac305efb1330fd31ca083b8d2081.png)
任意文件读取及漏洞复现
文章目录 渗透测试漏洞原理任意文件读取1. 任意文件读取概述1.1 漏洞成因1.2 漏洞危害1.3 漏洞分类1.4 任意文件读取1.4.1 文件读取1.4.2 任意文件读取1.4.3 权限问题 1.5 任意文件下载1.5.1 一般情况1.5.2 PHP实现1.5.3 任意文件下载 2. 任意文件读取攻防2.1 路径过滤2.1.1 过…...
![](https://www.ngui.cc/images/no-images.jpg)
目前的一些关于机器学习的感悟
目前的一些关于机器学习的想法 大家一直都在说深度学习和积极学习,当我在本科的时候,就听到很多关于这方面的东西,但当时自己对于这些东西的概念较为模糊,随着研究生进一步的学习,我想讲一下,到目前我所理…...
![](https://www.ngui.cc/images/no-images.jpg)
salesforce从sandbox部署到生产环境的自定义字段权限没有成功上载
salesforce从sandbox部署到生产环境的自定义字段权限没有成功上载 只将字段名称和类型上载了。 查阅: https://help.salesforce.com/s/articleView?idsf.deploy_special_behavior.htm&type5 显示: 自定义字段 从 API 版本 30.0 开始,…...
![](https://img-blog.csdnimg.cn/b810a7bf6b074d70a494b3206203843e.gif#pic_center)
字节跳动推出AI对话工具“豆包”:免费用
我是卢松松,点点上面的头像,欢迎关注我哦! 听说松松客服的小马爆料了一个消息:字节跳动推出了一个新的AI大模型对话工具,叫做“豆包”。竟然一查发现,早在8月18号就已经上线了呢。原来这个“豆包”其实是之…...
![](https://img-blog.csdnimg.cn/893a040623954c3ba9aaba2e266176bb.png)
时序预测 | MATLAB实现TCN-LSTM时间卷积长短期记忆神经网络时间序列预测
时序预测 | MATLAB实现TCN-LSTM时间卷积长短期记忆神经网络时间序列预测 目录 时序预测 | MATLAB实现TCN-LSTM时间卷积长短期记忆神经网络时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现TCN-LSTM时间卷积长短期记忆神经网络时间序列预测…...
![](https://www.ngui.cc/images/no-images.jpg)
代码随想录训练营二刷第十五天 | 层序遍历10道 226.翻转二叉树 101.对称二叉树 2
代码随想录训练营二刷第十五天 | 层序遍历10道 226.翻转二叉树 101.对称二叉树 2 一、102. 二叉树的层序遍历 题目链接:https://leetcode.cn/problems/binary-tree-level-order-traversal/ 思路:两次while,内层控制每一行的数量,…...
![](https://img-blog.csdnimg.cn/b6c3ede5db8f4567ac99b2d19785e72e.png)
nowcoder NC10 大数乘法
题目链接: https://www.nowcoder.com/practice/c4c488d4d40d4c4e9824c3650f7d5571?tpId196&tqId37177&rp1&ru/exam/company&qru/exam/company&sourceUrl%2Fexam%2Fcompany&difficultyundefined&judgeStatusundefined&tags&tit…...
![](https://img-blog.csdnimg.cn/img_convert/a3a707643423e92265749ae69e2a3b55.png)
wordpress网站+搬家/新闻发稿发布平台
前不久入手了一台树莓派,下面就说说如何对系统进行安装。Raspberry Pi 是现在比较热门的开源硬件之一,它使用SD卡作为系统卡,启动控制器,所以如何将SD卡中烧录上Raspberry Pi的系统是我们首先要掌握的,本篇中我们介绍的…...
![](/images/no-images.jpg)
做玉的网站/市场营销推广方案
废话不多说了,直接给大家贴代码了,具体代码如下所示:import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.Arrays;import …...
![](https://img-blog.csdnimg.cn/img_convert/df6050bb48d3846d52e10e5e7617f1ff.png)
桂林北站疫情防控最新消息/seo排名优化表格工具
题库来源:安全生产模拟考试一点通公众号小程序 2022高压电工复审题库为高压电工模拟考试题库考前必练习题目!2022高压电工理论题库及在线模拟考试根据高压电工新版教材大纲编写。高压电工模拟考试试题随时根据安全生产模拟考试一点通上查找答案。 1、【…...
![](/images/no-images.jpg)
公司网站维护费怎么做分录/网站优化推广是什么
第1关:方法1的准备工作:利用for语句创建列表 利用方括号、range函数可以创建列表,其实创建列表还有一种更强大、更方便的方法,就是使用 for 语句,这也是更简单绘制轨迹所采用的第 1 种方法,而本关任务就是学习它的使用方法。 #第1题 L = [101, 25, 38, 29, 108] ######…...
重庆网站建设狐灵科技/好用的磁力搜索引擎
gotoxy()函数,需自己定义。 #include <stdio.h> #include <windows.h> void gotoxy(short x,short y) {COORD pos{x,y};HANDLE hOutGetStdHandle(STD_OUTPUT_HANDLE); //获取标准输出设备句柄SetConsoleCursorPosition(hOut,pos); //这个函数定位hOut中…...
![](/images/no-images.jpg)
做招聘网站/深圳关键词推广排名
蓝桥杯国赛真题精选 ——Python 科目 题目 1 提示信息: 平方是一种运算,比如:a 的平方表示 aa。 例如:2 的平方为 4 (也就是 2*2 的积)例如:4 的平方为 16 (也就是 4*4 的积) 编程实现: 输入一个正整数n,将 1 到n 之间所有正整数(…...