取一个字符串并使用'*'返回其第一个char的所有匹配项

时间:2014-11-10 04:53:49

标签: python

我试图找出如何在python中搜索字符串并将其返回的地方,其中所有出现的第一个字符都被更改为' *'。例如 - ' babble'收益率' ba ** le'关于如何处理这个的任何建议?

4 个答案:

答案 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'

使用maplambda

>>> 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'