Python正则表达式

正则表达式

当处理文本数据时,正则表达式是一种强大的工具,它允许我们根据特定的模式来匹配、搜索和处理字符串。

正则表达式由一系列字符和特殊字符组成,用于描述文本模式。这些模式可以包含普通字符(如字母、数字和标点符号)以及特殊字符,用于表示匹配特定模式的规则。

1.普通字符

字母、数字、汉字、下划线、以及没有特殊定义的标点符号,都是"普通字符"。表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符。

2.转义字符

表达式可匹配
\n换行符
\t制表符
\\符号
^^符号
$$符号
..符号
??符号
**符号
++符号
{大括号
[中括号
(小括号

3.能够与 ‘多种字符’ 匹配的表达式

表达式可匹配
\d0~9中任意一个数字
\w任意一个字母或数字或下划线
\s包括空格、制表符、换页符等空白字符的其中任意一个
.小数点可以匹配除了换行符(\n)以外的任何一个字符

4.自定义能够匹配 ‘多种字符’ 的表达式

表达式可匹配
[ab5@]匹配“a”或“b”或“5”或“@”
[^abc]匹配“a”,“b”,“c”之外的任意一个字符
[f-k]匹配“f”~“k”之间的任意一个字符

5.修饰匹配次数的特殊符号

表达式可匹配
{n}表达式重复n次,“\w{2}”相当于“\w\w”
{m,n}表达式至少重复m次,最多重复n次,“ba{1,3}”可以匹配“ba”,“baa”,“baaa”
{m,}表达式至少重复m次
?匹配表达式0次或者1次,相当于{0,1}
+表达式至少出现1次,相当于{1,}
*表达式不出现或者出现任意次,相当于{0,}

6.一些代表抽象意义的特殊符号

表达式可匹配
^与字符串开始的地方匹配,不匹配任何字符
$与字符串结束的地方匹配,不匹配任何字符
|左右两边表达式之间“或”关系,匹配左边或右边,和括号配合使用
()在被修饰匹配次数时,括号中的表达式可以作为整体被修饰;
取匹配结果时,括号中的表达式匹配到的内容可以被单独取到

import re

re 模块使 Python 语言拥有全部的正则表达式功能。它提供了一种强大的工具来在文本中进行模式匹配和搜索操作。当正则表达式包含转义符时,建议使用raw string。

在Python中,原始字符串(raw string)是指字符串字面值(literal)的一种表示形式,它通过在字符串前面添加前缀 r 或 R 来表示。原始字符串的特点是,它会将转义字符(如反斜杠 \)视为普通字符,而不会对其进行转义。正常的字符串字面值中,反斜杠 \ 可以用于表示特殊字符序列,例如 \n 表示换行符、\t 表示制表符等。但有时候,我们希望将字符串中的反斜杠作为普通字符处理,而不是转义字符。这时就可以使用原始字符串。举个列子:

normal_string = "Hello\nWorld"
raw_string = r"Hello\nWorld"print(normal_string)  # 输出:Hello
# World (换行)
print(raw_string)     # 输出:Hello\nWorld

re函数

函数说明
re.compile用于编译正则表达式,生成一个正则表达式( Pattern )对象
re.match从字符串的起始位置匹配一个模式
re.search扫描整个字符串并返回第一个成功的匹配
re.findall在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果有多个匹配模式,则返回元组列表
re.sub用于替换字符串中的匹配项
re.split按照能够匹配的子串将字符串分割后返回列表

字符串匹配

import re# 编译正则表达式
pattern = re.compile(r'hello')# 匹配字符串
match = pattern.match('hello world')
if match:print('Match found:', match.group())
else:print('No match')# 搜索字符串
search = pattern.search('hello world')
if search:print('Search found:', search.group())
else:print('No search')# 查找所有匹配项
matches = pattern.findall('hello world, hello python')
print('All matches:', matches)# 替换匹配项
replace = pattern.sub('hi', 'hello world, hello python')
print('After replacement:', replace)# 分割字符串
split = pattern.split('hello world, hello python')
print('Split result:', split)

从文本文件中提取指定特征

我们要从如下文本提取指定的如下特征:

# run time: 1593total: 413# <type>  <1>    <2>        <3>
# A:      408    2341286554 38252903
# B:      3      2694539    1788611
# C:      403    2338592003 38252903
# D:      406    2338601343 38252903# size: 5496.955278 # MB

在这里插入图片描述

import redef extracting(path):Runtime_PATTERN = '(#\s+run\s+time:\s+)(\d+)'ds_runtime_pattern = re.compile(Runtime_PATTERN)Total_PATTERN = '(total:\s+)(\d+)'ds_total_pattern = re.compile(Total_PATTERN)A_PATTERN = '(#\sA:\s+)(\d+)\s+(\d+)\s+(\d+)'ds_a_pattern = re.compile(A_PATTERN)Size_PATTERN = '(#\s+size:\s+)(\d+\.\d+)(\s+#+\s)(\S+)'ds_size_pattern = re.compile(Size_PATTERN)with open(path) as infile:for line in infile:runtime_match = ds_runtime_pattern.match(line)if runtime_match is not None:runtime = int(runtime_match.group(2))print(runtime)continuetotal_match = ds_total_pattern.match(line)if total_match is not None:total = int(total_match.group(2))print(total)continuea_match = ds_a_pattern.match(line)if a_match is not None:a_col1 = int(a_match.group(2))a_col2 = int(a_match.group(3))a_col3 = int(a_match.group(4))print(a_col1, end=' ')print(a_col2, end=' ')print(a_col3)continuesize_match = ds_size_pattern.match(line)if size_match is not None:size = float(size_match.group(2))print(size)continueif __name__ == "__main__":extracting('test.txt')

运行结果:

在这里插入图片描述

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

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

相关文章

kafka 开启认证授权

前言 1、前面自己写了一篇关于各个环境各个模式的安装的文章&#xff0c;大家可以去看看 kafka各种环境安装(window,linux,docker,k8s),包含KRaft模式 2、使用版本 kafka_2.13-3.4.1 3、kafka验证方式&#xff0c;有两大类如下&#xff0c;文档内容在 kafka官方文档的 第七节…

蓝桥杯每日一题2023.10.14

年号字串 - 蓝桥云课 (lanqiao.cn) 题目描述 我们发现每个字母都与26紧密相关&#xff0c;其%26的位置就是最后一个字母&#xff0c;由于最开始将0做为了1故在写答案时需要注意细节问题 #include<bits/stdc.h> using namespace std; char s[] "ABCDEFGHIJKLMNOPQ…

编译linux的设备树

使用make dtbs命令时 在arch/arm 的目录Makefile文件中有 boot : arch/arm/boot prepare 和scripts是空的 在文件scripts/Kbuild.include中 变量build : -f $(srctree)/scripts/Makefile.build obj 在顶层Makefile中 $(srctree)&#xff1a;. 展开后-f ./scripts/Mak…

Linux:mongodb数据库源码包安装(4.4.25版本)

环境 系统&#xff1a;centos7 本机ip&#xff1a;192.168.254.1 准备的mongodb包 版本 &#xff1a; 4.4.25 全名称&#xff1a;mongodb-linux-x86_64-rhel70-4.4.25.tgz 下载源码包 Download MongoDB Community Server | MongoDBhttps://www.mongodb.com/try/downloa…

论文学习——Class-Conditioned Latent Diffusion Model For DCASE 2023

文章目录 引言正文AbstractIntroductionSystem Overview2.1 Latent Diffusion with sound-class-based conditioning以声音类别为条件的潜在扩散模型2.2 Variational Autoencoder and neural vocoder变分自编码器和神经声码器FAD-oriented Postprocessing filter&#xff08;专…

数据中心机房供电配电及能效管理系统设计

安科瑞虞佳豪壹捌柒陆壹伍玖玖零玖叁 摘要&#xff1a;现代的数据中心中都包括大量的计算机&#xff0c;对于这种场所的电力供应&#xff0c;都要求供电系统需要在所有的时间都有效&#xff0c;这就不同于一般建筑的供配电系统&#xff0c;它是一个交叉的系统&#xff0c;涉及…

使用图像处理跟踪瞳孔(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

HTTPS 加密全过程

加密协议以前是SSL,现在都是TLS, 而证书现在大多数都是SSL证书 抓包流程: TCP三次握手过后, 客户端发送Client Hello 服务器相应Server Hello 服务器再次响应发送证书: 服务器再发送公钥:

国内常用源开发环境换源(flutter换源,python换源,Linux换源,npm换源)

flutter换源 使用环境变量:PUB_HOSTED_URL FLUTTER_STORAGE_BASE_URL&#xff0c; upgrade出问题时可能会提示设置FLUTTER_GIT_URL变量。 flutter中国 PUB_HOSTED_URLhttps://pub.flutter-io.cn FLUTTER_STORAGE_BASE_URLhttps://storage.flutter-io.cn FLUTTER_GIT_URLhtt…

Python3无法调用Sqlalchemy解决(mysqldb)

原因 在安装Sqlalchemy后运行程序报错 无法导入mysqldb&#xff0c;缺失模块 ImportError: No module named ‘MySQLdb’ 既然缺少 MySQLdb 这个模块&#xff0c;尝试按照正常的想法执行 pip install MySQLdbpip install mysql-python 应该能解决&#xff0c;但是却找不到…

Zookeeper【Curator客户端Java版】从0到1——万字学习笔记

目录 初识Zookeeper Zookeeper作用 维护配置信息 分布式锁服务 集群管理 生产分布式唯一ID Zookeeper的设计目标 Zookeeper 工作机制 数据模型 ZooKeeper 命令操作 服务端常用命令 客户端常用命令 ZooKeeper JavaAPI操作 Curator 介绍 Curator API 常用操作 导入依赖 建立连接 …

SQL Server修改表结构

在SQL Server中修改的关键字是 ALTER(改变;(使)更改;修改(衣服使更合身);改动&#xff09; 列操作 添加列 添加列操作 alter tabel 表名 add 列名 数据类型--给员工表添加一个邮箱 alter的翻译是&#xff08;改变&#xff09; alter table people add PeopleMail varchar(2…

微信小程序获取当前日期时间

一、直接使用方式 在小程序中获取当前系统日期和时间&#xff0c;可直接拿来使用的常用的日期格式 //1. 当前日期 YYYY-MM-DDnew Date().toISOString().substring(0, 10)new Date().toJSON().substring(0, 10)//2. 当前日期 YYYY/MM/DDnew Date().toLocaleDateString()//3.…

解决jmeter软件显示为英文、返回数据乱码、设置编码格式的问题

一.jmeter软件每次打开都需要手动切换中文 1.修改配置文件&#xff0c;可以把jmeter设置成中文&#xff1a; 2.打开jmeter.properties配置文件&#xff0c;修改languagezh_CN 二.返回数据乱码 改配置文件 进入Jmeter的bin目录下&#xff0c;找到jmeter.properties文件&#…

工业互联网系列2 - 赋能传统制造业

工业互联网被称为“第四次工业革命”&#xff0c;它将计算、信息与通讯网络相融合&#xff0c;应用于传统的制造业带来制造业的全面升级&#xff0c;实现了生产效率的提高、质量的改进、成本的降低和生产流程的优化。 汽车制造已经达到非常高的智能化和自动化水平&#xff0c;让…

云计算是什么?学习云计算能做什么工作?

很多人经常会问云计算是什么&#xff1f;云计算能干什么&#xff1f;学习云计算能做什么工作&#xff1f;其实我们有很多人并不知道云计算是什么&#xff0c;小知今天来给大家讲讲学习云计算能做什么。 中国的云计算行业目前正处于快速发展阶段&#xff0c;随着互联网和数字化…

Jenkins UI 自动化持续化集成测试

一&#xff1a;安装jenkins 环境 在官网下载msi 直接安装即可 二&#xff1a;设置全局变量 设置allure 路径 三&#xff1a;创建项目 1、创建自由风格项目 2、如果项目在本地&#xff0c;且本地服务器是windows &#xff0c;找到Jenkins安装根目录&#xff0c;寻找config…

Anaconda prompt中使用conda下载pytorch,一直卡在solving environment解决方案

关闭梯子 清空镜像源&#xff1a; conda config --remove-key channels 在pytorch官网找到对应的版本与命令&#xff1a;PyTorch conda install pytorch torchvision torchaudio pytorch-cuda12.1 -c pytorch -c nvidia&#xff08;我的电脑CUDA版本为12.1.103&#xff0c;…

204、RabbitMQ 之 使用 topic 类型的 Exchange 实现通配符路由

目录 ★ 使用topic实现通配符路由代码演示topic通配符类型的Exchange代码演示:ConstantUtilConnectionUtilProducerConsumer01执行结果生产者消费者01消费者02 完整代码&#xff1a;ConstantUtilConnectionUtilProducerConsumer01Consumer02pom.xml ★ 使用topic实现通配符路由…

用servlet实现一个简单的猜数字游戏。

需要两个页面&#xff0c;一个jsp页面&#xff08;guess.jsp&#xff09;和servlet页面&#xff08;servlet&#xff09;。 一.jsp页面 在jsp页面中需要实现&#xff1a; 1.创建随机数并且保存在session中。 2.做个form表单提交猜的数字给servlet页面。 <%page import&…