需求导向的正则表达式

news/2024/9/25 17:54:22/

目录

re.sub

需求:把 1. 2.这些序号转成(1) (2)

需求:反过来,把(1)->1. ,(2)=》2. 。

需求:把出现的 1 2 3都转成下标

进阶1!只想让化学符号(NH3)有此效果,不能让序号这种数字也转换 

 ——下标很长时,如C_60要怎么办​编辑

再加上正负号的替换=》上标,如铵根离子NH4+

需求:上标替换10^2=>10² 


——————————————————————————————————————

import re

*:(0,)

+:(1,)

re.sub

re.sub(匹配的正则表达式,替换后的正则表达式,待处理的字符串)

即:re.sub(pattern,repl,string,可选参数count是替换最大次数,flags是匹配模式如多行模式/忽略大小写)

需求:把 1. 2.这些序号转成(1) (2)

详细要求:

1. xxx(有个空格)

1.xxx

都要转成(1)

错误0:要把点号和数字放在不同分组,然后只取数字的分组,否则点号会保留

错误1:.未转义

错误2:\d 只是表示一位数字

改正:注意,第二个引号里的\1表示第一个分组,\3是第三个分组,|是或,分组是第几个是算上|也是从左向右数的。

import re
str0="1. 2. (3) 12. 10000000. 123.lalal"
re.sub(r"(\d+)(\. )|(\d+)(\.)",r"(\1\3)",str0)

 

只要写一个替换模式,就会把所有满足这种模式的均替换。 

需求:反过来,把(1)->1. ,(2)=》2. 。

import re
str0="1..2..(3) 12....10000000. 123.lalal (4)(3838339300)(89)"
re.sub(r"\((\d+)\)|((\d+))",r"\1. \2. ",str0)

 

需求:把出现的 1 2 3都转成下标

输入:x2  y3

输出:x²  y³

现在有一个列表,存储了从0-9的下标

lst="₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉".split()

思路:还记得回调函数吗?把函数名作为参数输入。

re.sub(r"待匹配",“待替换——此处可以写一个函数,替换成你想要的”)

粗糙版:

进阶1!只想让化学符号(NH3)有此效果,不能让序号这种数字也转换 

这里就需要让正则表达式前面有东西(字母)

首先测试一下,如果不使用回调函数

两个括号的内容会一起被替换。

如果第二个括号写了组号 

就是把([a-zA-Z]+)(\d)替换成₆+第一个组里的东西,如果想保留某个分组的内容,一定要在第二个括号写明!

你看,这个就被替换没了

初具规模 

 ——下标很长时,如C_60要怎么办

再加上正负号的替换=》上标,如铵根离子NH4+

字母(数字)±  =》字母(数字)⁺ ⁻

 

import re
lst="₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉".split()
str0="1..2..(3) 12....10000000. 123.NH3 H2 o2 NH4+ NO3- K+(Fe3O4)C12 C60000(Rukawa111111)(89)"
def rplc1(a):#a是match对象,要提取字符串,需要使用group  group(0)是全部,group(i)是第i个括号里的b=a.group(2)numList=list(b)ans=a.group(1)for i in range(len(numList)):ans+=lst[int(numList[i])]return ans
str1=re.sub(r"([a-zA-Z]+\d*)\+",r"\1⁺",str0)
str1=re.sub(r"([a-zA-Z]+\d*)\-",r"\1⁻",str1)
re.sub(r"([a-zA-Z]+)(\d+)",rplc,str1)

需求:上标替换10^2=>10² 

 和替换下标很类似,不同的是需要去掉^,这个就在连接分组的时候忽略^所在分组即可

数字之间有空格!

因为我给的列表两个上标之间不一定只有一个空格

(并不是,就是编码的问题)

#这里需要re.split

re.split("\s+","⁰ ¹ ² ³       ⁴ ⁵ ⁶ ⁷ ⁸ ⁹")

 

并不用,split已经帮我们做好额

import relst2="⁰ ¹ ² ³       ⁴ ⁵ ⁶ ⁷ ⁸ ⁹".split()
str0="1..9^2..(3) 12....3^10000000. 7^1234567890987654321 2^123.NH3 H2 o2 NH4+ NO3- K+(Fe3O4)C12 C60000(Rukawa111111)(89)"
def sb(a):b=a.group(2)numList=list(b)ans=""for i in range(len(numList)):ans+=lst2[int(numList[i])]return ans
re.sub(r"(\^)(\d+)",sb,str0)

 


http://www.ppmy.cn/news/1530393.html

相关文章

华为HarmonyOS地图服务 4 - 通过“地图相机“控制地图的可见区域

场景介绍 华为地图的移动是通过模拟相机移动的方式实现的,您可以通过改变相机位置,来控制地图的可见区域,效果如图所示。 本章节将向您介绍相机的各个属性与含义,并移动相机。 相机移动前 …

CentOS中使用Docker运行Nginx并挂载本地目录

CentOS 中安装 Docker 并挂载本地目录: 一、安装 Docker 更新系统软件包: sudo yum update -y安装必要的软件包以允许使用 yum 安装 Docker: sudo yum install -y yum-utils device-mapper-persistent-data lvm2添加 Docker 仓库&#xff1a…

哪个编程工具让你的工作效率翻倍?

在探讨哪款编程工具能让工作效率翻倍时,我们不得不承认,这并非是一个非黑即白的答案,因为不同的开发者、不同的项目阶段以及不同的编程需求,都可能使得某种工具成为提升效率的关键。然而,如果要从智能的代码编辑器、强…

8606 二叉树的构建及遍历操作

### 伪代码 1. **CreateBiTree**: - 读取一个字符 ch。 - 如果 ch 是 #,则当前节点为空。 - 否则,创建一个新节点 T,将 ch 赋值给 T 的数据域。 - 递归创建 T 的左子树。 - 递归创建 T 的右子树。 2. **PreOrderTraverse**: …

pg入门11-pg中的publications是什么

在 PostgreSQL(PG)中,Publication(发布)是逻辑复制机制中的一个概念,用于定义哪些表的数据变更(INSERT、UPDATE、DELETE)可以发布到订阅者(Subscribers)。它主…

C++ QT程序打包,包含python环境

C QT程序打包,包含python环境 1、导出QT可执行包 首先在QTcreator中选择对应的项目,完成release版本的发布(确保调试成功) 找到生成release的文件夹所在处,将exe执行所需的附加文件一起复制到一个单独文件夹中&#…

Spring IDEA 2024 安装Lombok插件

1.简介 Lombook插件的Data标签可以自动生成类的get和set以及toString方法。 2.安装步骤 在idead设置的插件中搜索lombok插件&#xff0c;安装。 在Spring项目的pom.xml中添加依赖项 <dependency><groupId>org.projectlombok</groupId><artifactId…

Fyne ( go跨平台GUI )中文文档-小部件 (五)

本文档注意参考官网(developer.fyne.io/) 编写, 只保留基本用法 go代码展示为Go 1.16 及更高版本, ide为goland2021.2 这是一个系列文章&#xff1a; Fyne ( go跨平台GUI )中文文档-入门(一)-CSDN博客 Fyne ( go跨平台GUI )中文文档-Fyne总览(二)-CSDN博客 Fyne ( go跨平台GUI…