我试图找出如何在python中搜索字符串并将其返回的地方,其中所有出现的第一个字符都被更改为' *'。例如 - ' babble'收益率' ba ** le'关于如何处理这个的任何建议?
答案 0 :(得分:2)
解决方案比找出你想要的原因更容易:
def asteriskify( string ):
if len( string ) == 0: return '' # corner case pointed out by smci
return string[ 0 ] + string[ 1: ].replace( string[ 0 ], '*' )
答案 1 :(得分:2)
略微调整@ jez的整洁解决方案,以便在没有使用len(s)== 0或1的角落情况下爆炸:
def asteriskify(s):
if not s: # was if len(s) < 2:
return s
else:
return s[0] + s[1:].replace(s[0], '*')
答案 2 :(得分:0)
有关如何处理此事的任何建议?
是。我建议你通过查看pythons字符串方法来解决这个问题,因为你无疑会遇到一些有用的东西。只记得你想用这些字母做什么。我认为这不仅仅是为您提供代码而不需要进行任何研究。
https://docs.python.org/release/2.5.2/lib/string-methods.html
答案 3 :(得分:0)
使用re.sub
>>> import re
>>> def asteriskify(my_string):
... if len(my_string)>1:
... return my_string[0]+re.sub(my_string[0],"*",my_string[1:])
... else: return my_string
...
>>> asteriskify("bable")
'ba*le'
>>> asteriskify("babble")
'ba**le'
>>> asteriskify("b")
'b'
使用map
,lambda
:
>>> def asteriskify(my_string):
... if len(my_string) > 1:
... return my_string[0]+"".join(map(lambda x:"*" if my_string[0]==x else x,my_string[1:]))
... else: return my_string
...
>>> asteriskify('babble')
'ba**le'
>>> asteriskify('b')
'b'
>>> asteriskify('baaabbb ahdbb ccc')
'baaa*** ahd** ccc'