所以我的代码是
value = "123456"
我想删除除2和5之外的所有内容。
输出将为25
例如,即使值改变,程序也应该工作
value = "463312"
输出将为2
我尝试使用remove()
和replace()
功能。但它没有用。
在python 3.6.2上进行
答案 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.sub
将25
以外的所有字符替换为''
。
import re
x = "463312"
new = re.sub('[^25]+' ,'', x)
x = "463532312"
new = re.sub('[^25]+' ,'', x)
输出:
2
,522
答案 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>