原文: How to Remove a Specific Character from a String in Python
在 Python 中编码时,你有时可能需要从一个字符串中删除一个字符。
比如当你正在处理用户生成的输入,需要清理数据和删除不需要的字符的时候。
具体来说,你可能需要从一个字符串中只删除一个字符的实例,甚至是一个字符的所有实例。
Python 提供了许多方法来帮助你做到这一点。
在 Python 中从字符串中删除字符的两种最常见的方法是:
- 使用
replace()
字符串方法 - 使用
translate()
字符串方法
当使用这两种方法中的任何一种时,你可以指定你想从字符串中删除的字符。
这两种方法都是用你指定的值来替换一个字符。如果你指定了一个空字符,你想删除的字符就会被删除而不被替换。
在使用这些方法时需要注意的是,由于字符串是不可变的,所以原始字符串不会被改变。相反,这两个方法都会返回一个新的修改过的字符串,其中不包含你想删除的字符。
在这篇文章中,你将通过编码实例学习如何使用这两种方法从一个字符串中删除一个或多个字符。
下面是我们要介绍的内容:
- 如何使用
replace()
方法从一个字符串中删除一个特定的字符 - 如何使用
replace()
方法从一个字符串中删除多个字符 - 使用方法链删除多个字符
- 用
for
循环删除多个字符 - 用正则表达式删除多个字符
- 如何使用
translate()
方法从一个字符串中删除一个特定的字符 - 如何使用
translate()
方法从一个字符串中删除多个字符
我们开始学习吧!
如何在 Python 中使用 replace() 方法从一个字符串中删除一个特定的字符
replace()
方法的一般语法类似于以下内容:
string.replace( character, replacement, count)
让我们把它分解一下:
- 你在一个字符串
string
上使用了replace()
方法。 replace()
方法接受三个参数:
character
是一个必需的参数,代表你要从string
中删除的特定字符。replacement
是一个必需的参数,代表将取代character
的新字符串/字符。count
是一个可选参数,代表你想从string
中删除的character
的最大数量。如果你不包括count
,那么默认情况下,replace()
方法将删除所有character
的出现次数。
replace()
方法并不修改原始字符串。相反,它的返回值是原始字符串的副本,其中没有你想删除的字符。
现在,让我们看看 replace()
的实际应用吧!
假设你有下面这个字符串,你想删除所有的感叹号:
my_string = "Hi! I! Love! Python!"
以下是你如何删除所有出现的 !
字符:
my_string = "Hi! I! Love! Python!"
my_new_string = my_string.replace("!", "")
print(my_new_string)
# 输出
# Hi I Love Python
在上面的例子中,我给 my_string
添加了 replace()
方法。
然后我将结果存储在一个名为 my_new_string
的新变量中。
记住,字符串是不可改变的。原有的字符串保持不变——replace()
返回一个新的字符串,不会修改原有的字符串。
我指定要删除 !
字符,并指出我想用一个空字符来替换 !
我也没有使用 count
参数,所以 replace()
用一个空的字符替换了所有出现过的 !
存储在变量 my_string
中的原始字符串有四次出现 !
字符。
如果我想只删除三个字符的实例,而不是全部,我会使用 count
参数,并传递一个值 3
来指定我想替换该字符的次数:
my_string = "Hi! I! love! Python!"
my_new_string = my_string.replace("!", "", 3)
print(my_new_string)
# 输出
# Hi I love Python!
如何在 Python 中使用 replace() 方法从一个字符串中移除多个字符
可能有一天,你需要从一个字符串中替换多个字符。
在下面的章节中,你将看到使用 replace()
方法实现这一目的的三种方法。
使用方法链删除多个字符
一种方法是通过链式 replace()
方法来实现:
my_string = "Hi!? I!? love!? Python!?"
my_new_string = my_string.replace("!","").replace("?","")
print(my_new_string)
# 输出
# Hi I love Python
这种删除字符的方式可能相当难读。
使用 for 循环删除多个字符
另一种方法是在 for
循环中使用 replace()
方法来完成这个任务:
my_string = "Hi!? I!? love!? Python!?"
replacements = [('!', ''), ('?', '')]
for char, replacement in replacements:
if char in my_string:
my_string = my_string.replace(char, replacement)
print(my_string)
# 输出
# Hi I love Python
我首先创建了一个包含我想删除的两个字符(!
和 ?
)的字符串,并将其存储在变量 my_string
中。
我把我要替换的字符和它们的替代品一起存储在一个元组的列表中,元组的名称为 replacements
——我想用一个空字符串替换 !
,用一个空字符串替换 ?
。
然后,我使用 for
循环来迭代这个元组列表(如果你需要复习 for
循环,请阅读这篇文章)。
在 for
循环中,我使用 in
操作符来检查这些字符是否在字符串中。如果是,我就用 replace()
方法来替换它们。
最后,我重新赋值了这个变量。
使用正则表达式删除多个字符
还有一种方法是通过使用正则表达式库 re
和 sub
方法来实现的。
你首先需要导入这个库:
import re
然后,指定你要删除的字符组(在本例中,是 !
和 ?
字符),以及你要替换的字符。在本例中,替换成一个空字符:
import re
my_string = "Hi!? I!? love!? Python!?"
my_new_string = re.sub('[!?]',"",my_string)
print(my_new_string)
# 输出
# Hi I love Python
如何在 Python 中使用 translate() 方法从一个字符串中删除一个特定的字符
与 replace()
方法类似,translate()
可以从一个字符串中删除字符。
translate()
方法有点复杂,对初学者不是很友好。
当你需要从一个字符串中删除字符时,replace()
方法是最直接的解决方案。
当使用 translate()
方法替换字符串中的一个字符时,你需要创建一个字符翻译表,translate()
使用该表的内容来替换字符。
翻译表是一个键-值映射的字典,每个键被替换成一个值。
你可以使用 ord()
函数来获取字符的 Unicode 值,然后将该值映射到另一个字符。
这个方法返回一个新的字符串,其中旧字符串中的每个字符被映射到翻译表中的一个字符。
返回值是一个新的字符串。
让我们看一个例子,使用前面几节的相同代码:
my_string = "Hi! I! love! Python!"
my_new_string = my_string.translate( { ord("!"): None } )
print(my_new_string)
# 输出
# Hi I love Python
在上面的例子中,我使用 ord()
函数来返回与我想替换的字符相关的 Unicode 值,在这个例子中是 !
。
然后,我将该 Unicode 值映射到 None
——表示无或空——这确保了将其删除。具体来说,它用 None
值替换了每一个 !
字符的实例。
如何在 Python 中使用 translate() 方法从一个字符串中删除多个字符
如果你需要使用 translate()
方法替换一个以上的字符呢?为此,你可以使用一个迭代器,像这样:
my_string = "Hi!? I!? love!? Python!?"
my_new_string = my_string.translate( { ord(i): None for i in '!?'} )
print(my_new_string)
# 输出
# Hi I love Python
在上面的例子中,我通过使用一个迭代器,遍历我想删除的字符,用 None
的值替换了 !
和 ?
。
translate()
方法检查 my_string
中的每个字符是否等同于感叹号或问号。如果是,那么它就被替换成 None
。
总结
希望这篇文章能够帮助你了解如何使用 Python 内置的 replace()
和 translate()
字符串方法删除字符。
感谢你阅读本文,happy coding!