Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python:如何删除某些字符_Python_String_Character - Fatal编程技术网

python:如何删除某些字符

python:如何删除某些字符,python,string,character,Python,String,Character,如何编写函数removeThese(stringToModify,charsToRemove),该函数将返回一个字符串,该字符串是原始stringToModify字符串,其中charsToRemove中的字符已从中删除 使用正则表达式: >>> s = 'stringToModify' >>> rem = 'oi' >>> s.translate(str.maketrans(dict.fromkeys(rem))) 'strngTMdfy'

如何编写函数removeThese(stringToModify,charsToRemove),该函数将返回一个字符串,该字符串是原始stringToModify字符串,其中charsToRemove中的字符已从中删除

使用正则表达式:

>>> s = 'stringToModify'
>>> rem = 'oi'
>>> s.translate(str.maketrans(dict.fromkeys(rem)))
'strngTMdfy'
import re
newString = re.sub("[" + charsToRemove + "]", "", stringToModify)
作为一个具体的例子,下面将从句子中删除所有出现的“a”、“m”和“z”:

import re
print re.sub("[amz]", "", "the quick brown fox jumped over the lazy dog")
这将删除从“m”到“s”的所有字符:


这是一个使用lambda函数和python filter()方法的机会<代码>过滤器接受谓词和序列,并返回仅包含原始项中的那些项的序列 谓词为真的序列。这里我们只需要
s
中的所有字符,而不是
rm

>>> s = "some quick string 2 remove chars from"
>>> rm = "2q"
>>> filter(lambda x: not (x in rm), s)
"some uick string remove chars from"
>>>

实际上,这是漫长的一天。我会使用“if x not in set(remove_this)”。这可能会在循环中每次都重新创建set()。我建议删除_this=set('aeiou'),只是我怀疑5个字符的线性搜索可能比散列更快。事实上,我用timeit做了一些基准测试,然后对过早的微优化感到尴尬,没有发布它们。Regex不适合字符替换。正则表达式必须被编译和执行,这使得它的速度变慢。是的,但是如果正则表达式要被多次重复使用,它们可以被编译,并且它们支持更复杂的替换操作。根据我的经验,在大多数编程任务中,这种便利性往往胜过速度考虑。但是,如果将
charsToRemove
设置为
^x
0-9
@Robert Rossney,您会发现这个建议还有许多其他问题
re.escape(charsToRemove)
可以克服这个问题,以防有人读到这篇文章并产生疑问。但是正则表达式仍然不是这个问题的最佳解决方案
str.translate
对于win.FWIW,这需要Python 3.x.@Marius:在py2k中实现它更简单。由于@silenghost
maketrans(dict.fromkeys(rem)
将生成错误
maketrans()
接受两个参数
re.sub("[m-s]", "", "the quick brown fox jumped over the lazy dog")
>>> s = "some quick string 2 remove chars from"
>>> rm = "2q"
>>> filter(lambda x: not (x in rm), s)
"some uick string remove chars from"
>>>