文本处理:字符串替换
方法1:str.replace
str.replace(old, new[, count])
Return a copy of the string with all occurrences of substring old replaced by new. If the optional argument count is given, only the first count occurrences are replaced.
该方法逻辑大致如下所示,存在多个 old
与 new
映射对时,需要串联使用多个 replace
方法, 效率较低。
matches = list(re.finditer(old, string))if len(matches) == 0:returnif count > 0:for match in matches:string[match.start(0): match.end(0)] = match.group(0)count -= 1if count == 0:break
else:for match in matches:string[match.start(0): match.end(0)] = match.group(0)
方法2:str.translate
在了解该方法之前,先了解类方法 str.maketrans
str.maketrans(x[, y[, z]])
- If there is only one argument, it must be a dictionary mapping Unicode ordinals (integers) or characters (strings of length 1) to Unicode ordinals, strings (of arbitrary lengths) or None. Character keys will then be converted to ordinals.
- If there are two arguments, they must be strings of equal length, and in the resulting dictionary, each character in x will be mapped to the character at the same position in y. If there is a third argument, it must be a string, whose characters will be mapped to None in the result.
-
如果实参值是一个字典,则字典的键可以为“单个字符”、“Unicode 序数”, 字典值可以为“Unicode 序数”、“任意长度的字符串”、None。返回结果为一个字典,返回字典的键会转换为“Unicode 序数”, 返回字典的值与实参值一致。
-
如果传入两个实参值,则位置参数
x
,y
必须是一个任意长度的字符串,会将同一位置的x
字符映射为y
字符,如果存在第三个实参值,位置参数z
中的每一个字符将与 None 建立映射关系:assert len(x) == len(y)d = dict() for c_x, c_y in zip(x, y):d.update({ord(c_x): c_y}if z is not None:for c_z in z:d.update({ord(c_z}: None)
str.translate(table)
Return a copy of the string in which each character has been mapped through the given translation table.
位置参数table
接受的实参值类似于 str.maketrans
的返回结果,str.translate
会将字符串一一进行映射,如果字符对应的 Unicode 序数在实参值字典中,则可能会被映射为其它任意长度的字符串,或者被删除(Unicode 序数对应 None 时)。
方法3:re.sub(比较复杂)
re.sub(pattern, repl, string, count=0, flags=0)
Return the string obtained by replacing the leftmost non-overlapping occurrences of pattern in string by the replacement repl.
此函数的逻辑大致如下:
matches = list(re.finditer(pattern, string))if len(matches) == 0: # If the pattern isn’t found, string is returned unchanged.return string
else:for match in matches:if isinstance(repl, str): # repl can be a string or a functionstring[match.start(0): match.end(0)] = replelse:string[match.start(0): match.end(0)] = repl(match)return string
从左往右,将string
中匹配到pattern
并且非重叠的部分替换成repl
, repl
可以是一个字符串,也可以是一个函数。
“非重叠”的意思是指 pattern
在string
匹配的部分不存在重叠情况,如下:pattern
第一次匹配 string
中的 “12”, 第二次匹配 string
中的 “34”, 而非“23”,否则相邻的两个匹配存在重叠。
re.sub(r"(\d)(\d)", "99", "1234") # return "9999"
repl
为字符串类型时,支持“转义”与组内容的反向引用,即会对repl
中转义的部分进行特殊处理, 注意包含转义符号\
时,需使用 Python Raw String 表示法:
-
转义 ASCII 字符,并且是有效转义,替换后的结果采用转义后的字符,如 “\n” 表示一个换行符。
re.sub(r"(\d)(\d)", r"a\nb", "1234") # return 'a\nba\nb'
-
如果转义 ASCII 失败,则抛出异常:
re.sub(r"(\d)(\d)", r"\z", "1234") # 抛出异常 re.error: bad escape \z at position 0
-
如果与其它非 ASCII 转义,不做处理,仅保留非 ASCII 字符:
re.sub(r"(\d)(\d)", r"\&", "1234") # return '\\&\\&'
-
如果转义符号与组编号组合,则引用第编号组匹配到的内容:
re.sub(r"(\d)(\d)", r"\1", "1234") # return "13# 如果第二项为 "\1", 则返回'\x01\x01'————双重转义,Python 与 正则表达式都将 “\” 作为转义字符。 # ord("\x01") -> 1 # chr(1) -> "\x01"
-
在 Python 3.9 中,除了支持组编号,也支持组别名,来引用特定组匹配到的内容,只是此种情形中,需在
pattern
中为组进行命名 :re.sub(r"(?P<group1>\d)(?P<group2>\d)", r"\<group1>", "1234") # 使用组名 “13” re.sub(r"(?P<group1>\d)(?P<group2>\d)", r"\<1>", "1234") # 使用组编号 “13”
如果 repl
为函数, 则传入实参为 re.Match,函数返回值需为字符串, 如下:
def func(match):if len(match.group(0)) > 1:return "9" * len(match.group(0))else:return ""re.sub(r"\d+", func, "a1b23c456") # return "ab99c999"
相关文章:
文本处理:字符串替换
方法1:str.replace str.replace(old, new[, count]) Return a copy of the string with all occurrences of substring old replaced by new. If the optional argument count is given, only the first count occurrences are replaced. 该方法逻辑大致如下所示&am…...
python 调用 dll 出现精度问题
问题:python 在调用dll 的时候出现了精度问题 总结:使用decimal库进行转换就可以正常传递。 ‘ 心急的朋友可以略过下文了。 心急的朋友可以略过下文了。 心急的朋友可以略过下文了。 心急的朋友可以略过下文了。 ’ 遇到的问题具体情况 dll 生成函数…...
STL讲解——模拟实现string
STL讲解——模拟实现string 经典的string类问题 大厂在面试中,面试官总喜欢让学生自己来模拟实现string类,最主要是实现string类的增、删、查、改、构造、拷贝构造、赋值运算符重载以及析构函数。大家看下自己可不可以写一个string类? cla…...
CDH 6.3.2 升级Hive 2.3.9
升级背景 DolphinScheduler 3.1.1安装好后,其源码中集成的是Hive 2.1.1,版本太低,当在数据中心连接Hive数据源时报错,所以升级CDH自带的Hive为2.3.9版本。 一、准备工作 1、下载hive2.3.9并解压 下载地址:http://a…...
距离不是拦截我们前进的主因,与社科院杜兰金融硕士一起奔赴山海
最近有咨询社科院杜兰金融管理硕士项目的同学反馈他在西安,读研来北京上课太远了。一直在纠结要不要申请,其实距离不是问题,相向而行才是关键。在项目就读的同学好多也是来自外地,他们克服了种种困难来到项目学习,就是…...
【SpringBoot】MyBatis-plus 报错 sqlSessionFactory sqlSessionTemplate 最新解决办法
本文针对 MyBatis-plus,对于 MyBatis 报相同的错误,可以看这个大佬的文章:SpringBoot3整合MyBatis报错:Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are required 针对报错如下: Property sqlSessionF…...
jsp诊疗预约系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
一、源码特点 jsp诊疗预约系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,使用jav…...
详解 APISIX Lua 动态调试插件 inspect
作者罗锦华,API7.ai 技术专家/技术工程师,开源项目 pgcat,lua-resty-ffi,lua-resty-inspect 的作者。 原文链接 为什么需要 Lua 动态调试插件? Apache APISIX 有很多 Lua 代码,如何在运行时不触碰源代码的…...
#科研筑基# python初学自用笔记 第五篇 函数
调用函数python有很多内置函数,我们可以直接调用,详见python官方文档:内置函数 — Python 3.11.2 文档,也可以在命令行中输入help(函数名)来查看该函数的使用法则。函数名的本质就是指向一个函数对象的引用,完全可以用…...
设计模式之策略模式
一.基本内容1 . 实例有各种鸭子(野鸭,北京鸭子,水鸭等,鸭子有各种行为,比如飞,叫等显示鸭子的信息传统方法解决:鸭子为抽象类,具体鸭子继承抽象类2.传统方法的不足:其他鸭…...
dbdeployer 使用札记
https://github.com/datacharmer/dbdeployer默认配置文件为当前用户的$HOME/.dbdeployer/config.json作为配置文件,可以通过dbdeplyoer defaults export导出并修改配置或者直接通过dbdeployer defaults update来更新默认文件,配置文件包含MySQL初始信息。…...
MATLAB算法实战应用案例精讲-【图像处理】数字图像模糊化(附Java、python和matlab代码实现)
目录 前言 几个相关概念 噪声 滤波器 算法原理 算法思想 噪...
搭建Hexo博客-第1章-Git和GitHub以及Coding的简单用法
搭建Hexo博客-第1章-Git和GitHub以及Coding的简单用法 搭建Hexo博客-第1章-Git和GitHub以及Coding的简单用法 Coding GitHub Hexo Markdown 搭建博客 大家好,这是我第一次写博客。使用 GitHub Hexo 创建最基本的博客很容易,网上有很多现成的教程。…...
【C++修行之路】C/C++内存管理
文章目录程序区域内存划分C语言动态内存分配:new和delete:new、delete和malloc、free的区别:程序区域内存划分 C/C程序内存区域划分非常相似。 C语言动态内存分配: malloc、calloc、realloc都是C语言动态开辟内存的常用函数 其中 malloc 开…...
spring cloud alibaba Sentinel(四)
服务雪崩 在分布式系统中,由于网络原因或自身的原因,服务一般无法保证 100% 可用。 如果一个服务出现了问题,调用这个服务就会出现线程阻塞的情况, 此时若有大量的请求涌入,就会出现多条 线程阻塞等待,进而导致服务瘫痪。 由于服…...
Redis第三讲
目录 三、Redis03 3.1 Redis持久化之RDB 3.1.1 什么是RDB 3.1.2 备份是如何执行的 3.1.3 Fork 3.1.4 RDB持久化流程 3.1.5 dump.rdb文件 3.1.6 配置rdb文件生成位置 3.1.7 如何触发RDB快照以及保持策略 3.2 Redis持久化之AOF 3.2.1 什么是AOF 3.2.2 AOF持久化流程 …...
JAVA线程池的使用
一、池化思想和JAVA线程池 池化是很重要的思想;池化的好处是提供缓冲和统一的管理。这个笔者在本人的数据库连接池的博客中已经提到过了(JAVA常用数据库连接池_王者之路001的博客-CSDN博客 )。 线程池是另一种池化思想的运用,把…...
力扣56.合并区间
文章目录力扣56.合并区间题目描述排序合并力扣56.合并区间 题目描述 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中…...
代码随想录二刷Day03链表: 24.两两交换链表中的节点,19.删除链表的倒数第N个节点,面试题 02.07. 链表相交,142.环形链表||
24.两两交换链表中的节点 文章链接:代码随想录 (programmercarl.com) 思路: (1)首先如果要处理相邻两个节点的话,一定需要操作两个节点的前一个节点才可以,因此,本题需要设定一个虚拟头节点 …...
我应该在我的博客上写什么? 介绍如何撰写初学者容易担心的文章
我想有很多人开了博客,但想不起来写作,无法取得进展。 博客的主题和文章的内容不会仅仅通过写你想做的事情来工作。 重要的是要了解用户想要阅读的内容以及人们可能收集的内容,并将其与您想要编写的内容很好地匹配。 这一次,我…...
嵌入式C语言设计模式 --- 外观模式
1 - 什么是外观模式? 外观模式(Facade Pattern),是一种比较简单的结构型模式,它存在的目的,也是为了简单。 外观模式隐藏了一系列接口的复杂性,旨在为外部客户端提供一个更高层次且统一简单的接口,简化了客户端调用某些模块的一系列操作。 外观模式应该是软件工程师…...
若依ruoyi——手把手教你制作自己的管理系统【三、代码生成】
昨天情人节一( ̄︶ ̄*)) 送给赛利亚一((* ̄3 ̄)╭ ********* 专栏略长 爆肝万字 细节狂魔 请准备好一键三连 ********* 修改后的页面: 干干净净贼舒服一Ψ( ̄∀ ̄)Ψ——Ψ( ̄∀&#x…...
SCI论文写作神器集合 —— 超级实用
特此声明: 本文拷贝多处别人的内容,并给出具体的链接 本文所提到的软件都为博主在文章撰写过程中发掘的比较实用的工具,旨在帮助小伙伴们更快更有效率的完成文章发表,如果其他好用的工具,欢迎各位交流~~ 一、文献搜索神…...
MAC 系统安装多版本 JDK 并任意切换
1、背景 在进行 Java 开发的过程中,我们可能需要使用不同版本的 JDK。例如:一些旧的 Java 应用程序只能在旧版本的 JDK 上运行,而一些新的 Java 应用程序需要较新的 JDK 才能运行。 在 MAC 系统上,如何安装多个版本的 JDK 并配置…...
配置 Smart Link 接口时需注意的互斥命令
配置 Smart Link 接口时需注意的互斥命令 一、接口加入Smart Link组功能与以下功能互斥一、接口加入Smart Link组功能与以下功能互斥 注:当接口已经加入Smart Link组,则不能再配置以下功能;反之,当接口已经配置以下功能ÿ…...
QT的下载和安装
这里介绍的是QT官方方式下载,每次都让我很糊涂,就记载一下。先是下载QT online installerhttps://www.qt.io/download 在下方有Go Open Sourcehttps://www.qt.io/download-open-source 在下方有Download the Qt Online installerhttps://www.qt.io/downl…...
nacos配置中心与服务注册中心
文章目录 目录 文章目录 前言 一、服务注册与发现中心 二、配置中心 总结 前言 Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它是 Spring Cloud Alibaba 组件之一,负责服务注册发现和服务配置. [服务治理的作用和微服务配置管理] Na…...
UE4 手把手教你做插件(1) 从代码引用插件
0,前言 我看的是 技术宅阿棍儿 的视频,B站有。 系列视频:从代码引用插件_哔哩哔哩_bilibili 看不懂,只能边查资料边看,讲的顺序有点乱 1,根据视频提示创建第三方插件 注意:如果只有空白插件的情…...
【Mybatis源码解析】一级缓存和二级缓存源码解析
文章目录缓存使用缓存源码测试代码上一篇《【Mybatis源码解析】mapper实例化及执行流程源码分析》,主要讲解了Mybatis的基本原理一级执行的流程,这一章来讲一下Mybatis的两个缓存:一级缓存和二级缓存。 因为网上大部分都是使用xml配置的方式…...
你知道MES实施的要点吗?
随着国家行动纲领:中国制造2025(智能制造)的发布,MES系统在制造业的工厂中所占比重越来越大,越来越多的工厂选择使用MES完成工厂的信息化、数字化、智能化生产。伴随着企业对MES的需求不断增大,生产MES的厂…...
做女装代理需要自建网站么/怎么做好网络营销
用matrix[0][j] 记录第j列是否为0 用matrix[i][0]记录第i行是否为0 因为在0 0 位置有重复,所以新开个变量记录第0行或者第0列 更新的时候先更新从第1行开始和从第1列开始 妙啊 哭了 class Solution {public void setZeroes(int[][] matrix) {int m matrix.len…...
上海专业做网站排名/代引流推广公司
Socket里面的协议解析是Socket通讯程序设计中最复杂的地方,如果你的应用层协议设计或实现不佳,Socket通讯中常见的粘包,分包就难以避免。SuperSocket内置了命令行格式的协议CommandLineProtocol,如果你使用了其它格式的协议&#…...
门户网站建设公司渠道/企业网站建设价格
在安装完red hat enterprise linux 6.5后,通过ftp不能使用root用户,将/etc/vsftpd/ftpusers和/etc/vsftpd/user_list两个文件中的root通过添加#号注释掉,重启ftp服务:service vsftpd restart后,依然报错:50…...
php 数据库 wordpress/seo怎么才能做好
1:寻找类定义jvm会在自己的一个名叫“方法区”的内存块中,寻找名叫“MyObject”的Class对象(注意class也是一个对象,该对象记录了所有类的定义),如果有,则按照Class对象的定义,生成一个MyObject对象。2:加载…...
医药b2b平台/上海哪家seo公司好
JVM(Java 虚拟机)算是面试必问的问题的了。 而但凡问 JVM 一定会问的第一个问题就是:讲一讲 JVM 的组成?那本文就讲一下 JVM 的组成。 首先来说 JVM 的组成分为,整体组成部分和运行时数据区组成部分。 一、JVM 整体组…...
seo优化网站建设哪家好/廊坊seo排名
访问DVWA时,页面无法显示,出现错误提示,如下所示: DVWA System error - config file not found. Copy config/config.inc.php.dist to config/config.inc.php and configure to your environment. 中文大意为:DVWA系统…...