如何在 Python 中替换字符串中的多个字符
本教程向你展示了如何在 Python 中替换一个字符串中的多个字符。
假设我们想删除字符串中的特殊字符,并用空格代替。
-
要删除的特殊字符列表是
!#$%^&*()
。 -
另外,我们还想用 whitespace 替换逗号
,
。 - 我们将操作的示例文本。
A!!!,Quick,brown#$,fox,ju%m%^ped,ov&er&),th(e*,lazy,d#!og$$$
使用 str.replace()
替换 Python 中的多个字符
我们可以使用 str
的 replace()
方法将子字符串替换成不同的输出。
replace()
接受两个参数,第一个参数是你要匹配字符串的 regex 模式,第二个参数是匹配字符串的替换字符串。
它在 replace()
中还有第三个可选参数,它接受一个整数,用来设置要执行的最大 count
替换次数。如果你把 2
作为 count
参数,replace()
函数将只匹配和替换字符串中的 2 个实例。
str.replace('Hello', 'Hi')
将用 Hi
替换字符串中所有 Hello
的实例。如果你有一个字符串 Hello World
,并对其运行 replace 函数,执行后会变成 Hi World
。
让我们对上面声明的示例文本使用 replace
。首先将特殊字符去掉,通过循环每个字符并替换成一个空字符串,然后将逗号转换为空格。
txt = "A!!!,Quick,brown#$,fox,ju%m%^ped,ov&er&),th(e*,lazy,d#!og$$$"
def processString(txt):
specialChars = "!#$%^&*()"
for specialChar in specialChars:
txt = txt.replace(specialChar, "")
print(txt) # A,Quick,brown,fox,jumped,over,the,lazy,dog
txt = txt.replace(",", " ")
print(txt) # A Quick brown fox jumped over the lazy dog
这意味着在 spChars
方括号内的任何字符都将被一个空字符串替换,使用 txt.replace(spChars, '')
。
第一个 replace()
函数的字符串结果将是:
A, Quick, brown, fox, jumped, over, the, lazy, dog
下一个 replace()
调用将把所有逗号 ,
的实例替换成单个空格。
A Quick brown fox jumped over the lazy dog
使用 re.sub()
或 re.subn()
来替换 Python 中的多个字符
在 Python 中,你可以导入 re
的模块,它有大量的 regex 的表达式匹配操作供你利用。
re
中的两个这样的函数是 sub()
和 subn()
。
我们再为这些方法声明一个字符串的例子。假设我们想把一个字符串内的所有数字替换成 X。
txt = "Hi, my phone number is 089992654231. I am 34 years old. I live in 221B Baker Street. I have 1,000,000 in my bank account."
在 Python 中使用 re.sub()
替换多个字符
该函数有 3 个主要参数。第一个参数接受一个 regex 模式,第二个参数是一个字符串,用来替换匹配的模式,第三个参数是要操作的字符串。
创建一个函数,将一个字符串中的所有数字转换为 X。
import re
txt = "Hi, my phone number is 089992654231. I am 34 years old. I live in 221B Baker Street. I have 1,000,000 in my bank account."
def processString3(txt):
txt = re.sub("[0-9]", "X", txt)
print(txt)
processString3(txt)
输出:
Hi, my phone number is XXXXXXXXXXXX. I am XX years old. I live in XXXB Baker Street. I have X,XXX,XXX in my bank account.
re.subn()
替换 Python 中的多个字符
这个函数本质上与 re.sub()
相同,但是返回一个转换后的字符串的元组和替换的数量。
import re
txt = "Hi, my phone number is 089992654231. I am 34 years old. I live in 221B Baker Street. I have 1,000,000 in my bank account."
def processString4(txt):
txt, n = re.subn("[0-9]", "X", txt)
print(txt)
processString4(txt)
输出:
Hi, my phone number is XXXXXXXXXXXX. I am XX years old. I live in XXXB Baker Street. I have X,XXX,XXX in my bank account.'
txt, n = re.subn("[0-9]", "X", txt)
在上面的代码片段中,处理后的字符串被分配给 txt
,替换计数器被分配给 n
。
如果你想记下有多少个模式组作为指标或用于进一步处理,则 re.subn()
很有用。
在 Python 中使用 translate()
和 maketrans()
替换多个字符
translate()
和 maketrans()
使用一种不同于 regex 的方法,它利用字典将旧值映射到新值。
maketrans()
接受 3 个参数或一个字典的映射。
-
str1
- 要替换的字符串。 -
str2
- 以上字符的替换字符串。 -
str3
- 要删除的字符串。
maketrans()
一个原始字符串和它的替换之间的映射表。
translate()
接受任何 maketrans()
返回,然后生成翻译后的字符串。
比方说,我们想把一个字符串中的所有小写元音转换成大写和删除字符串中的所有 x、y 和 z。
txt = "Hi, my name is Mary. I like zebras and xylophones."
def processString5(txt):
transTable = txt.maketrans("aeiou", "AEIOU", "xyz")
txt = txt.translate(transTable)
print(txt)
processString5(txt)
输出:
HI, m nAmE Is MAr. I lIkE EbrAs And lOphOnEs.
translate()
将所有小写元音转换为大写,并删除所有 x, y, 和 z 的实例。
使用这些方法的另一种方法是使用一个单一的映射字典而不是三个参数。
def processString6(txt):
dictionary = {
"a": "A",
"e": "E",
"i": "I",
"o": "O",
"u": "U",
"x": None,
"y": None,
"z": None,
}
transTable = txt.maketrans(dictionary)
txt = txt.translate(transTable)
print(txt)
这仍然会产生与 processString5
相同的输出,但是是用字典实现的。你可以使用任何对你更方便的方法。
总之,有多种方法可以通过使用 Python 中的内置函数或从导入库中的函数来替换字符串中的多个字符。
最常用的方法是使用 replace()
。re.sub()
和 subn()
也相当容易使用和学习。translate()
使用不同的方法,因为它不依靠正则表达式来执行字符串操作,而是依靠字典和 Map。
如果你愿意,你甚至可以使用 for 循环在字符串上手动循环,并添加你自己的条件来替换,只需使用 substring()
或 split()
,但这将是非常低效和多余的。Python 提供了现有的函数来为你完成这项工作,这比你自己完成繁琐的工作要容易得多。
相关文章
在Python中将十六进制转换为字节
发布时间:2023/12/18 浏览次数:153 分类:Python
-
本教程介绍了如何在Python中将十六进制值转换为字节文字。十六进制,通常简写为hex,使用16个符号(0-9,a-f)表示值,与十进制的10个符号形成对比。例如,十进制中的1000在十六进制中是3E8。
如何在 Python 中删除字符串中的最后一个字符
发布时间:2023/12/18 浏览次数:88 分类:Python
-
Python 提供了通过使用 slicing 方法、for() 循环和 regex 方法从字符串和特定数量的字符中删除最后一个字符的支持。Python 字符串是一个用双引号或单引号括起来的字符组合。Python 提供了多个函数
如何在 Python 中从字符串中删除子字符串
发布时间:2023/12/18 浏览次数:162 分类:Python
-
本教程将演示如何在 Python 中从一组字符串中删除/替换一个特定的子字符串。本教程介绍了如何在 Python 中删除字符串中的子字符串。它将告诉我们,字符串不能只是被删除,而只是被替换。
Python 中错误 Address Already in Use
发布时间:2023/07/09 浏览次数:151 分类:Python
-
我们将通过示例介绍Python中何时出现 Address already in use 错误以及如何解决。Python 中的错误Address already in use 本文将讲述运行使用端口的程序时发生的Python堆栈错误。
Python 中错误 ValueError: Math Domain Error
发布时间:2023/07/09 浏览次数:355 分类:Python
-
在本篇文章中,我们的目标是探索解决 Python 中的 ValueError: math domain error 错误的不同方法。当编码方面数学(基础或高级)的使用存在固有缺陷时,Python 中通常会引发 ValueError: math domain error 错
Python 错误 Name xrange Is Not Defined
发布时间:2023/07/09 浏览次数:100 分类:Python
-
本篇文章将介绍如何解决 Python 中 name 'xrange' is not defined 的错误。解决Python中name 'xrange' is not defined错误 让我们尝试理解为什么会发生这个特定的错误。 让我们首先尝试复制这个问题。
Python 错误 TypeError: List Indices Must Be Integers, Not STR
发布时间:2023/07/09 浏览次数:534 分类:Python
-
在本篇文章中,我们的目标是探索如何避免 TypeError: list indices must be integers or slices, not str。TypeError主要发生在Python中,每当操作的数据类型出现问题时。
Python 中错误 AttributeError: __Enter__
发布时间:2023/07/09 浏览次数:1159 分类:Python
-
在 Python 中,AttributeError 是在未定义 __enter__ 函数的情况下通过 with 语句使用类的对象时导致的错误。
Python 错误 ModuleNotFoundError: No Module Named '_Ctypes'
发布时间:2023/07/09 浏览次数:537 分类:Python
-
本篇文章旨在了解如何解决 Python 中的 ModuleNotFoundError: No module named '_ctypes'。了解Python中 ModuleNotFoundError: No module named '_ctypes' 根本原因