gpt4 book ai didi

python - 从 Python 中的字符串中删除特定字符

转载 作者:IT老高 更新时间:2023-10-28 12:02:31 24 4
gpt4 key购买 nike

我正在尝试使用 Python 从字符串中删除特定字符。这是我现在正在使用的代码。不幸的是,它似乎对字符串没有任何作用。

for char in line:
if char in " ?.!/;:":
line.replace(char,'')

我该如何正确地做到这一点?

最佳答案

Python 中的字符串是不可变的(无法更改)。正因为如此,line.replace(...) 的作用只是创建一个新字符串,而不是更改旧字符串。您需要将其重新绑定(bind)(分配)到 line 以使该变量采用新值,并删除这些字符。

此外,相对而言,您执行此操作的方式会有点慢。对于有经验的 Python 开发者来说,这也可能会有点令人困惑,他们会看到一个双重嵌套的结构,并会想一想正在发生更复杂的事情。

从 Python 2.6 和更新的 Python 2.x 版本开始 *,您可以改用 str.translate ,(请参阅下面的 Python 3 答案):

line = line.translate(None, '!@#$')

或用re.sub 替换正则表达式

import re
line = re.sub('[!@#$]', '', line)

括号中的字符构成一个字符类line 中属于该类的任何字符都将替换为 sub 的第二个参数:一个空字符串。

Python 3 答案

在 Python 3 中,字符串是 Unicode。你必须翻译一点不同。 kevpie 在 comment 中提到了这一点在其中一个答案上,并在 documentation for str.translate 中注明.

当调用 Unicode 字符串的 translate 方法时,不能传递我们上面使用的第二个参数。您也不能将 None 作为第一个参数传递。相反,您将翻译表(通常是字典)作为唯一参数传递。该表将字符的序数值(即在它们上调用ord的结果)映射到应该替换它们的字符的序数值,或者——对我们有用—— 表示应该删除它们。

因此,要使用 Unicode 字符串进行上述舞蹈,您可以调用类似

translation_table = dict.fromkeys(map(ord, '!@#$'), None)
unicode_line = unicode_line.translate(translation_table)

这里 dict.fromkeysmap用于简洁地生成包含

的字典
{ord('!'): None, ord('@'): None, ...}

更简单,如 another answer puts it ,就地创建翻译表:

unicode_line = unicode_line.translate({ord(c): None for c in '!@#$'})

或者,由 Joseph Lee 提出, 创建与 str.maketrans 相同的转换表:

unicode_line = unicode_line.translate(str.maketrans('', '', '!@#$'))

* 为了与早期的 Python 兼容,您可以创建一个“空”转换表来代替 None:

import string
line = line.translate(string.maketrans('', ''), '!@#$')

这里 string.maketrans用于创建翻译表,它只是一个字符串,其中包含序数值为 0 到 255 的字符。

关于python - 从 Python 中的字符串中删除特定字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3939361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com