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…

hive复合类型的数据查询

hive数据表创建-CSDN博客 --第一个名字以M开头的 访问数组array 数组&#xff08; array) 引用方式 列名 [ 元素索引 _ 以 0 开始 ] select * from emp where emp_name[0] rlike "^M"; -- 出生日期是在 5 几年 访问 Map map 引用方式 列名 ["Key"] selec…

论文学习——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;专…

出现 PowerShell终端执行conda activate无效 解决方法

目录 1. 问题所示2. 原理分析3. 解决方法1. 问题所示 在cmd命令行中执行conda activate 可以成功,但是回pycharm的PowerShell终端执行该命令,一直无效 具体过程如下: PS E:\pythonProject\SteganoGAN-master> conda activate py37 PS E:\pythonProject\SteganoGAN-mas…

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

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

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

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

LeetCode 每日一题 2023/10/9-2023/10/15

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 10/9 2578. 最小和分割10/10 2731. 移动机器人10/11 2512. 奖励最顶尖的 K 名学生10/12 2562. 找出数组的串联值10/13 1488. 避免洪水泛滥10/14 136. 只出现一次的数字10/1…

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…

13-网络篇-局域网与外网通信

1.局域网的主机如何和外网通信 比如我们电脑是在局域网内&#xff0c;如何能让它与外网服务器通信。 首先我们要明确一个概念&#xff0c;2个IP必须都是外网IP才能相互建立起外网通信。 比如电脑的IP是192.168.0.3 服务器的IP是 213.18.2.4 在这里&#xff0c;我们可以用NAT路由…

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.…

【JUC】中断机制(interrupt,interrupted,isInterrupted)

中断机制 文章目录 中断机制1. 概述2. 三大方法3. 中断运行中的线程的方式 1. 概述 首先一个线程不应该由其他线程来强制中断或停止&#xff0c;而是应该由线程自己自行停止&#xff0c;自己来决定自己的命运。所以Thread.stop,Thread.suspend,Thread.resume 都已经被废弃了 …

springboot 配置 servlet

springboot 配置 servlet 在Spring Boot中配置Servlet&#xff0c;你可以遵循以下步骤&#xff1a; 创建一个Servlet类&#xff0c;例如MyServlet&#xff0c;继承自javax.servlet.http.HttpServlet&#xff0c;并实现相应的doGet()或doPost()方法。 import javax.servlet.h…

Java竞赛快速输入输出,防止读取数据过慢导致超时

Java的输出和输出真是太慢了&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 如果需要输入105数量级的数据并输出同样数量级的数据&#xff0c;使用Scanner和System.out耗时将很可能超过1s。为了避免这种输入输出过慢的情况&#xff0c;这里引入Java中比较快的一…