Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >在 Python 中的常见的几种字符串替换操作

在 Python 中的常见的几种字符串替换操作

作者头像
全栈程序员站长
发布于 2022-09-07 09:14:42
发布于 2022-09-07 09:14:42
6.2K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

基于Python3.7.3中,主要的方法有

  • 替换子串:replace()
  • 替换多个不同的字符串:re.sub(),re.subn()
  • 用正则表达式替换:re.sub(),re.subn()
  • 根据位置来替换:slice()

replace() 方法

比如,输入的字符串为’one two one two one’,第一个参数为替换前的参数,第二个为替换后的参数。默认会替换字符串中的所有符合条件的字符串

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
s = 'one two one two one'

print(s.replace(' ', '-'))
# one-two-one-two-one

也可以指定一个最大替换次数值,一旦指定,只会替换前面匹配的n个字符串

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(s.replace('one', 'XXX'))
# XXX two XXX two XXX

print(s.replace('one', 'XXX', 2))
# XXX two XXX two one

当然,也可以支持链式的多次调用实现多重条件过滤。(但最好还是使用下面的translate()方法)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(s.replace('one', 'XtwoX').replace('two', 'YYY'))
# XYYYX YYY XYYYX YYY XYYYX

print(s.replace('two', 'YYY').replace('one', 'XtwoX'))
# XtwoX YYY XtwoX YYY XtwoX

替换多个不同的字符串: translate()

translate官方文档

转换关系存放在 str.maketrans() 方法来创建。并且调用 translate() 来真正的执行。用例如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
s = 'one two one two one'

print(s.translate(str.maketrans({ 
   'o': 'O', 't': 'T'})))
# One TwO One TwO One

print(s.translate(str.maketrans({ 
   'o': 'XXX', 't': None})))
# XXXne wXXX XXXne wXXX XXXne

其中,maketrans 方法中是一个字典参数,第一个参数(key)为替换前的参数,第二个参数(value)为替换后的参数(为None表示移除替换前的参数)。

str.maketrans()也可以使用三个字符串作为参数,而不是字典。

如果不是一个字典参数,而是如下的两个参数或者3个参数,那么结果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(s.translate(str.maketrans('ow', 'XY')))
# Xne tYX Xne tYX Xne

print(s.translate(str.maketrans('ow', 'XY', 'n')))
# Xe tYX Xe tYX Xe

在上面的情况下,第一个和第二个参数的长度必须匹配。在两个参数的情况下,会将第一个参数的字符,依次的映射成第二个参数的字符(o-> X,w-> Y)。第三个参数表示在映射完的结果之后,需要移除的字符。

通过正则表达式来实现替换:re.sub, re.subn

re — Regular expression operations

在第一个参数中输入正则表达式,第二个参数表示需要替换的子字符串,第三个参数表示需要处理的字符串,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import re

s = 'aaa@xxx.com bbb@yyy.com ccc@zzz.com'

print(re.sub('[a-z]*@', 'ABC@', s))
# ABC@xxx.com ABC@yyy.com ABC@zzz.com

和前面的replace() 方法一样,也可以指定最大的替换次数(第四个参数)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(re.sub('[a-z]*@', 'ABC@', s, 2))
# ABC@xxx.com ABC@yyy.com ccc@zzz.com

使用同一个字符串,来替换多个子串,如果你对正则表达水熟悉的化,可以考虑在正则中加入 | 来同时匹配多个字符串。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(re.sub('aaa|bbb|ccc', 'ABC', s))
# ABC@xxx.com ABC@yyy.com ABC@zzz.com

也可以使用在替换后的新子串中引入原先的替换子串的部分值。通过正则表达式中的 \1 等来实现。

在正则表达式中\1 代表了原先正则表达式中的第一个小括号()里面匹配的内容,\2 表示匹配的第二个,依次类推,所以,在实际中可以灵活地使用匹配的原字符串。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(re.sub('([a-z]*)@', '\\1-123@', s))
# aaa-123@xxx.com bbb-123@yyy.com ccc-123@zzz.com

print(re.sub('([a-z]*)@', r'\1-123@', s))
# aaa-123@xxx.com bbb-123@yyy.com ccc-123@zzz.com

说明一下,就是如果字符串开头没有加上 r,则你需要多转义一次

如果你想获得正则表达式匹配后的各个组合部分(分组后的)信息,可以使用 re.subn() 函数。

re — Regular expression operations

不好理解的化,可以参看下面的例子。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
t = re.subn('[a-z]*@', 'ABC@', s)
print(t)
# ('ABC@xxx.com ABC@yyy.com ABC@zzz.com', 3)

print(type(t))
# <class 'tuple'>

print(t[0])
# ABC@xxx.com ABC@yyy.com ABC@zzz.com

print(t[1])
# 3

通过位置来替换: slice

严格来说,也不算是新的替换方法,其实就是字符串的切片操作,一定程度上可以实现字符串替换的效果。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
s = 'abcdefghij'

print(s[:4] + 'XXX' + s[7:])
# abcdXXXhij

s_replace = 'XXX'
i = 4
print(s[:i] + s_replace + s[i + len(s_replace):])
# abcdXXXhij

print(s[:4] + '-' + s[7:])
# abcd-hij

参考文献:


  1. 原文Replace strings in Python (replace, translate, re.sub, re.subn) | note.nkmk.me

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/136638.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年6月3,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python3字符串替换replace(),translate(),re.sub()
Python3的字符串替换,这里总结了三个函数,replace()和translate()和re.sub()
全栈程序员站长
2022/09/07
1.4K0
Python3字符串替换replace(),translate(),re.sub()
python中删除特定字符串
import re text = ‘wo,didi;wode,;wode’ text0 = text.replace(‘didi’, ”) print(re.sub(‘[,;]’, ‘ ‘, text0))
全栈程序员站长
2022/09/02
3.4K0
python3 如何去除字符串中不想要的
      "Zhào Qián Sūn Lǐ Zhōu Wú Zhèng Wáng" 
py3study
2020/01/06
1K0
Python字符串替换的3种方法
Python字符串替换笔记主要展示了如何在Python中替换字符串。Python中有以下几种替换字符串的方法,本文主要介绍前三种。
Python学习者
2023/05/18
1.4K0
python函数基础字符串操作numpy 和list互相转换
list 转 numpy np.array(a) ndarray 转 list a.tolist() 写入文件必须是字符
DC童生
2018/12/12
1.7K0
Python怎么删除字符
阅读本文需要3分钟 问题: 过滤用户输入中前后多余的空白字符 ‘ ++++abc123--- ‘ 过滤某windows下编辑文本中的'\r': ‘hello world \r\n' 去掉文本中unicode组合字符,音调 "Zhào Qián Sūn Lǐ Zhōu Wú Zhèng Wáng" 如何解决以上问题? 去掉两端字符串:strip(), rstrip(),lstrip() s = ' -----abc123++++ ' # 删除两边空字符 print(s.str
Python知识大全
2020/02/13
1.7K0
Python高效编程(三)
实际编程和面试都会遇到的典型问题。 图片来源于网络 如何判断字符串a是否已字符串b开头或者结尾 #遍历以'.py'和'.sh'结尾的文件,改为可执行权限 import os, stat s = 't
dreamkong
2018/06/21
9330
python 删除字符
s = '\tabc\t123\tisk' print(s.replace('\t', ''))
用户5760343
2019/07/24
1.6K0
python 正则之提取字符串中的汉字,数字,字母
#\d 匹配一个数字字符。等价于 [0-9] #\D 匹配一个非数字字符。等价于 [^0-9] #过滤字符串中的英文与符号,保留汉字 import re st = "hello,world!!%[545]你好234世界。。。" ste = re.sub("[A-Za-z0-9\!\%\[\]\,\。]", "", st) print(ste) #从字符串中提取数字 totalCount = '100abc' totalCount = re.sub("\D", "", totalCount) p
学到老
2019/01/25
12.4K0
Python使用正则表达式处理字符串
关于正则表达式基本语法请参考之前发过的文章常用正则表达式锦集与Python中正则表达式的用法,正则表达式扩展语法的高级用法后面会专门整理后再发。 Python标准库re提供了正则表达式操作所需要的功能,既可以直接使用re模块中的方法(见下表)来处理字符串。 方法功能说明compile(pattern[, flags])创建模式对象escape(string)将字符串中所有特殊正则表达式字符转义findall(pattern, string[, flags])列出字符串中模式的所有匹配项finditer(pa
Python小屋屋主
2018/04/16
1.4K0
两天研习Python基础(九) 文本处理
字符转换例子: https://stackoverflow.com/questions/555705/character-translation-using-python-like-the-tr-command
王诗翔呀
2020/07/06
1K0
python字符串删除指定符号(不限位置)「建议收藏」
这个可以根据正则删除,此处是删除串中的数字1-9,字符a-z,A-Z,还可以加其他的
全栈程序员站长
2022/09/05
1.8K0
Python:正则表达式 re 模块
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回 None。
丹枫无迹
2019/09/11
6530
Python中的正则表达式
句点(.)符号匹配除了换行符\n以外的任何字符。无论字母、数字、空格(不包括\n换行符)、可打印字符、不可打印字符,使用.都可以匹配。
py3study
2020/01/03
2.5K0
python 2.x和3.x中maketrans和translate函数的使用
maketrans和translate函数是进行字符串字符编码的常用方法。本文着重点在于演示其基本用法和在不同版本下操作的差异。本文提到的2.X版本指2.6以上的版本,3.X版本指3.1以上的版本。
用户7886150
2021/01/11
9070
python中的正则表达式(re模块)
正则表达式本身是一种小型的、高度专业化的编程语言,而在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配。正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎执行。
测试开发社区
2019/09/20
8210
python re模块 正则表达式
正则表达式对字符串的逻辑操作,主要是对字符串的一种过滤,用“元字符” 与“普通字符”组成一个字符串规则对已知的字符串或文本过滤出自己想要的字符串
py3study
2020/01/19
6970
正则表达式
一、在python中, 使用正则表达式, 需要导入re模块 import re 二、普通字符匹配, 使用findall 1 #字符匹配, 普通字符 2 #findall: 返回所有满足条件的列表集合
用户7798898
2022/05/06
2660
python笔记54-re正则匹配替换字符串(sub和subn)
python 里面可以用 replace 实现简单的替换字符串操作,如果要实现复杂一点的替换字符串操作,需用到正则表达式。 re.sub用于替换字符串中匹配项,返回一个替换后的字符串,subn方法与sub()相同, 但返回一个元组, 其中包含新字符串和替换次数。
上海-悠悠
2021/01/18
32.1K0
[第四周]Python字符串方法详解
Python中字符串(string)对象提供了很多方法来操作字符串,功能相当丰富。
OrekiShiko
2019/03/24
1.1K0
[第四周]Python字符串方法详解
相关推荐
Python3字符串替换replace(),translate(),re.sub()
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验