如何删除字符串中除所选值之外的所有值

时间:2017-09-17 03:55:58

标签: python string

所以我的代码是 value = "123456" 我想删除除2和5之外的所有内容。 输出将为25 例如,即使值改变,程序也应该工作 value = "463312" 输出将为2

我尝试使用remove()replace()功能。但它没有用。 在python 3.6.2上进行

6 个答案:

答案 0 :(得分:12)

您最好不要尝试删除所有不需要的字符,而是最好在结果中构建要保留的字符的白名单:

>>> value = '123456'
>>> whitelist = set('25')
>>> ''.join([c for c in value if c in whitelist])
'25'

这是循环隐式的另一个选项。我们构建了一个与str.translate一起使用的映射,其中每个字符都映射到'',除非另有说明:

>>> from collections import defaultdict
>>> d = defaultdict(str, str.maketrans('25', '25'))
>>> '123456'.translate(d)
'25'

答案 1 :(得分:9)

如果您正在寻找正则表达式解决方案,那么您可以使用re.sub25以外的所有字符替换为''

import re
x = "463312"
new = re.sub('[^25]+' ,'', x)
x = "463532312"
new = re.sub('[^25]+' ,'', x)

输出:     2522

答案 2 :(得分:2)

如果您使用的是Python 2,则可以使用以下过滤器:

In [60]: value = "123456"

In [61]: whitelist = set("25")

In [62]: filter(lambda x: x in whitelist, value)
Out[62]: '25'

如果您使用的是Python 3,则需要"".join()过滤器的结果。

答案 3 :(得分:0)

value="23456"
j=""
for k in value:
    if k=='2' or k=='5':
        j=j+k
print (j)

这是你所说的woorking程序,你可以给任何值输入,它将始终打印25。

答案 4 :(得分:0)

我尝试使用带有filter()的Python内置lambda方法来解决此问题。见下文:

a = "1225866125" # Should return "22525"
whitelist = '25'

# Use filter to remove all elements that does not match the condition
a = "".join(filter(lambda c: c in whitelist, a))

希望这有帮助!

(编辑缩短答案,@Akavall +再次@salparadise信用)

答案 5 :(得分:0)

  <p><a href='index.html'><center>1</center></a></p>
        <p><a href='page2.html'><center>2</center></a></p>