python:如何删除某些字符
如何编写函数removeThese(stringToModify,charsToRemove),该函数将返回一个字符串,该字符串是原始stringToModify字符串,其中charsToRemove中的字符已从中删除 使用正则表达式:python:如何删除某些字符,python,string,character,Python,String,Character,如何编写函数removeThese(stringToModify,charsToRemove),该函数将返回一个字符串,该字符串是原始stringToModify字符串,其中charsToRemove中的字符已从中删除 使用正则表达式: >>> s = 'stringToModify' >>> rem = 'oi' >>> s.translate(str.maketrans(dict.fromkeys(rem))) 'strngTMdfy'
>>> 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中实现它更简单。由于@silenghostmaketrans(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"
>>>