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.rhkb.cn/news/159067.html

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

相关文章

【TensorFlow2 之012】TF2.0 中的 TF 迁移学习

#012 TensorFlow 2.0 中的 TF 迁移学习 一、说明 在这篇文章中&#xff0c;我们将展示如何在不从头开始构建计算机视觉模型的情况下构建它。迁移学习背后的想法是&#xff0c;在大型数据集上训练的神经网络可以将其知识应用于以前从未见过的数据集。也就是说&#xff0c;为什么…

蓝桥杯 第 1 场算法双周赛 第1题 三带一 c++ map 巧解 加注释

题目 三带一【算法赛】https://www.lanqiao.cn/problems/5127/learning/?contest_id144 问题描述 小蓝和小桥玩斗地主&#xff0c;小蓝只剩四张牌了&#xff0c;他想知道是否是“三带一”牌型。 所谓“三带一”牌型&#xff0c;即四张手牌中&#xff0c;有三张牌一样&#…

CSS学习基础知识

CSS学习笔记 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width,…

独立式三相无源逆变电源设计

摘要 面对全球日趋严重的能源危机问题&#xff0c;可再生能源的开发和利用得到了人们的高度重视。其中辐射到地球太阳能资源是十分富饶的&#xff0c;绿色清洁的太阳能不会危害我们的生存环境&#xff0c;因而受到了人们的广泛利用。光伏发电作为可再生能源被广泛的应用&#x…

RabbitMq启用TLS

Windows环境 查看配置文件的位置 选择使用的节点 查看当前节点配置文件的配置 配置TLS 将证书放到同配置相同目录中 编辑配置文件添加TLS相关配置 [{ssl, [{versions, [tlsv1.2]}]},{rabbit, [{ssl_listeners, [5671]},{ssl_options, [{cacertfile,"C:/Users/17126…

如何定制化跑腿小程序源码

跑腿小程序源码为您提供了一个强大的起点&#xff0c;但要创建一个成功的本地服务平台&#xff0c;您通常需要对源码进行定制化。这篇文章将介绍如何定制化跑腿小程序源码&#xff0c;包括添加新功能、修改界面和优化用户体验。 选择合适的跑腿小程序源码 首先&#xff0c;您…

Linux查看端口号及进程信息

Linux查看端口号及进程 Linux查看端口号 netstat netstat -tuln显示当前正在监听的端口号以及相关的进程信息 ss ss -tuln与netstat类似&#xff0c;ss也可以用于显示当前监听的端口以及相关信息 isof isof -i :端口号端口号替换为具体要查找的端口号&#xff0c;显示该端…

Leetcode 75——1768.交替合并字符串 解题思路与具体代码【C++】

一、题目描述与要求 1768. 交替合并字符串 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你两个字符串 word1 和 word2 。请你从 word1 开始&#xff0c;通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长&#xff0c;就将多出来的字母追加到合并后字符…

DOSBox和MASM汇编开发环境搭建

DOSBox和MASM汇编开发环境搭建 1 安装DOSBox2 安装MASM3 编译测试代码4 运行测试代码5 调试测试代码 本文属于《 X86指令基础系列教程》之一&#xff0c;欢迎查看其它文章。 1 安装DOSBox 下载DOSBox和MASM&#xff1a;https://download.csdn.net/download/u011832525/884180…

MySQL操作合集

数据库的操作 创建数据库 create database [if not exists] db_name [character set utf8] [collate utf8_general_ci];查看所有数据库 show databases;查看数据库的创建语句 show create database db_name;修改数据库 alter database db_name character set utf8 colla…

Linux之open/close/read/write/lseek记录

一、文件权限 这里不做过多描述&#xff0c;只是简单的记录&#xff0c;因为下面的命令会涉及到。linux下一切皆是文件包括文本、硬件设备、管道、数据库、socket等。通过ls -l 命令可以查看到以下信息 drwxrwxrwx 1 root root 0 Oct 10 17:06 open -rwxrwxrwx 1 root roo…

内网渗透——隧道代理

文章目录 代理代理使用场景VPS建立隧道frpMSF木马生成监听开启frp服务端和客户端执行exe木马文件 代理 实验环境&#xff1a; 攻击机kali&#xff1a;192.168.188.133&#xff08;NAT模式&#xff09; 模拟的公网服务器&#xff08;本机&#xff09;&#xff1a;10.9.75.239 …

【数据库——MySQL(实战项目1)】(4)图书借阅系统——触发器

目录 1. 简述2. 功能代码2.1 创建两个触发器&#xff0c;分别在借出或归还图书时&#xff0c;修改借阅人表中的已借数目(附加&#xff1a;借阅人表的总借书数、图书表的借阅次数以及更新图书表的图书状态为(已借出/在架上))字段&#xff1b;2.2 创建触发器&#xff0c;当借阅者…

相似性搜索:第 3 部分--混合倒排文件索引和产品量化

接续前文&#xff1a;相似性搜索&#xff1a;第 2 部分&#xff1a;产品量化 SImilarity 搜索是一个问题&#xff0c;给定一个查询的目标是在所有数据库文档中找到与其最相似的文档。 一、介绍 在数据科学中&#xff0c;相似性搜索经常出现在NLP领域&#xff0c;搜索引擎或推…

Codeforces Round 903 (Div. 3)

D. Divide and Equalize Example input Copy 7 5 100 2 50 10 1 3 1 1 1 4 8 2 4 2 4 30 50 27 20 2 75 40 2 4 4 3 2 3 1 output Copy YES YES NO YES NO YES NONote The first test case is explained in the problem statement. 很重要很重要的知识点&a…

Windows端口号被占用的查看方法及解决办法

Windows端口号被占用的查看方法及解决办法 Error starting ApplicationContext. To display the conditions report re-run your application with debug enabled. 2023-10-14 22:58:32.069 ERROR 6488 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter : ***…

CustomNavBar 自定义导航栏视图

1. 创建偏好设置键 CustomNavBarTitlePreferenceKey.swift import Foundation import SwiftUI//State private var showBackButton: Bool true //State private var title: String "Title" //"" //State private var subtitle: String? "SubTitl…

算法练习13——跳跃游戏II

LeetCode 45 跳跃游戏 II 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回…

螺杆支撑座对注塑机的生产过程有哪些重要影响?

螺杆支撑座对注塑机的生产过程具有重要影响&#xff0c;主要体现在以下几个方面&#xff1a; 1、精度和稳定性&#xff1a;螺杆支撑座能够提高注塑机的精度和稳定性&#xff0c;从而保证塑料制品的品质和一致性。通过提供稳定的支撑和承载&#xff0c;螺杆支撑座可以减少机器运…

React18入门(第三篇)——React Hooks详解,React内置Hooks、自定义Hooks使用

文章目录 概述一、内置 Hook——useState1.1 响应式数据更新1.2 什么是 state1.3 state 特点&#xff08;一&#xff09;——异步更新1.4 state 特点&#xff08;二&#xff09;——可能会被合并1.5 state 特点&#xff08;三&#xff09;——不可变数据&#xff08;重要&#…