2024-04-19 19:56:21 发布
网友
我正在尝试使用Python从字符串中删除特定字符。这是我现在使用的代码。不幸的是,它似乎对字符串没有任何作用。
for char in line: if char in " ?.!/;:": line.replace(char,'')
我该怎么做?
Python中的字符串是不可变的(不能更改)。因此,line.replace(...)的效果只是创建一个新字符串,而不是更改旧字符串。您需要将其重新绑定到line(assign)以便让该变量接受新值,并删除这些字符。
line.replace(...)
line
而且,你做这件事的方式会比较慢,相对来说。对于经验丰富的Python来说,这也可能有点让人困惑,因为它们会看到一个双重嵌套的结构,并会想一想,更复杂的事情正在发生。
从Python2.6和更新的Python2.x版本*开始,您可以改为使用^{}(但请继续阅读Python3的区别):
line = line.translate(None, '!@#$')
或者用^{}替换正则表达式
import re line = re.sub('[!@#$]', '', line)
括号中的字符构成字符类。类中的line中的任何字符都将替换为sub的第二个参数:空字符串。
sub
在Python 3中,字符串是Unicode。你得换个说法。kevpie在其中一个答案的comment中提到了这一点,并在documentation for ^{}中指出了这一点。
当调用Unicode字符串的translate方法时,不能传递上面使用的第二个参数。也不能将None作为第一个参数传递,甚至不能传递string.maketrans中的转换表。相反,您将字典作为唯一的参数传递。本词典将字符的序数值映射到应该替换它们的字符的序数值(即对它们调用^{}的结果),或者有效地映射到我们-None以指示应该删除它们。
translate
None
string.maketrans
所以要用Unicode字符串来完成上面的舞蹈,您可以调用
translation_table = dict.fromkeys(map(ord, '!@#$'), None) unicode_line = unicode_line.translate(translation_table)
这里^{}和^{}用于简洁地生成包含
{ord('!'): None, ord('@'): None, ...}
更简单的是,作为another answer puts it,在适当的位置创建字典:
unicode_line = unicode_line.translate({ord(c): None for c in '!@#$'})
*为了与以前的Pythons兼容,可以创建一个“null”转换表来代替None:
import string line = line.translate(string.maketrans('', ''), '!@#$')
这里^{}用于创建一个翻译表,它只是一个包含序数值为0到255的字符的字符串。
>>> line = "abc#@!?efg12;:?" >>> ''.join( c for c in line if c not in '?:!/;' ) 'abc#@efg12'
我是否遗漏了这一点,或者仅仅是以下几点:
string = "ab1cd1ef" string.replace("1","") print string # result: "abcdef"
把它圈起来:
a = "a!b@c#d$" b = "!@#$" for char in b: a = a.replace(char,"") print a # result: "abcd"
Python中的字符串是不可变的(不能更改)。因此,
line.replace(...)
的效果只是创建一个新字符串,而不是更改旧字符串。您需要将其重新绑定到line
(assign)以便让该变量接受新值,并删除这些字符。而且,你做这件事的方式会比较慢,相对来说。对于经验丰富的Python来说,这也可能有点让人困惑,因为它们会看到一个双重嵌套的结构,并会想一想,更复杂的事情正在发生。
从Python2.6和更新的Python2.x版本*开始,您可以改为使用^{} (但请继续阅读Python3的区别):
或者用^{} 替换正则表达式
括号中的字符构成字符类。类中的
line
中的任何字符都将替换为sub
的第二个参数:空字符串。在Python 3中,字符串是Unicode。你得换个说法。kevpie在其中一个答案的comment中提到了这一点,并在documentation for ^{} 中指出了这一点。
当调用Unicode字符串的} 的结果),或者有效地映射到我们-
translate
方法时,不能传递上面使用的第二个参数。也不能将None
作为第一个参数传递,甚至不能传递string.maketrans
中的转换表。相反,您将字典作为唯一的参数传递。本词典将字符的序数值映射到应该替换它们的字符的序数值(即对它们调用^{None
以指示应该删除它们。所以要用Unicode字符串来完成上面的舞蹈,您可以调用
这里^{} 和^{} 用于简洁地生成包含
更简单的是,作为another answer puts it,在适当的位置创建字典:
*为了与以前的Pythons兼容,可以创建一个“null”转换表来代替
None
:这里^{} 用于创建一个翻译表,它只是一个包含序数值为0到255的字符的字符串。
我是否遗漏了这一点,或者仅仅是以下几点:
把它圈起来:
相关问题 更多 >
编程相关推荐