从字符串中过滤字符[重复]

Posted

技术标签:

【中文标题】从字符串中过滤字符[重复]【英文标题】:Filtering Characters from a String [duplicate] 【发布时间】:2013-08-12 23:18:58 【问题描述】:

我需要创建一个函数,它将两个字符串作为输入并返回 str 1 的副本,其中删除了 str2 中的所有字符。

首先是使用 for 循环遍历 str1,然后与 str2 进行比较,以完成减法,我应该创建第三个字符串来存储输出,但之后我有点迷失了。

def filter_string(str1, str2):
    str3 = str1   
    for character in str1:
       if character in str2:
           str3 = str1 - str2
    return str3

这是我一直在玩的,但我不明白我应该如何进行。

【问题讨论】:

【参考方案1】:

只需使用str.translate():

In [4]: 'abcdefabcd'.translate(None, 'acd')
Out[4]: 'befb'

来自documentation:

string.translate(s, table[, deletechars])

s 中删除deletechars 中的所有字符(如果存在),然后使用table 翻译这些字符,它必须是一个256 个字符的字符串,用于翻译每个字符值,由它的序号索引。 如果table 为None,则只执行字符删除步骤。

如果——出于教育目的——您想自己编写代码,您可以使用如下代码:

''.join(c for c in str1 if c not in str2)

【讨论】:

这行得通,我理解如何做到这一点,但我认为严格来说这不是我应该如何实现的。 在 Python3 中 translate 函数只接受一个参数,参见 docs.python.org/3/library/… 。要在 Python 3 中做同样的事情,您需要:'abcdefabcd'.translate(str.maketrans('a': None, 'c': None, 'd': None)),另请参阅 ***.com/questions/41535571/… 这适用于 Python2。对于 python3:text = text.translate(str.maketrans('','',string.punctuation))【参考方案2】:

使用replace:

def filter_string(str1, str2):
    for c in str2:
        str1 = str1.replace(c, '')
    return str1

或者一个简单的列表理解:

''.join(c for c in str1 if c not in str2)

【讨论】:

以上是关于从字符串中过滤字符[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Pandas 数据框中过滤包含字符串模式的行 [重复]

JavaScript正则表达式过滤两个字符之间的文本[重复]

过滤掉字符串中重复的字符

字符过滤函数,过滤重复字符串

从日期到字符串的树枝过滤器

在c#中过滤字符串列表[重复]