如何替换字符串中第一个字母的所有实例,而不是第一个字母本身

时间:2015-10-13 19:45:47

标签: python

到目前为止我的代码是:

def ChangeString():
    print (userString.replace(
userString =str(input("Please enter a string "))
ChangeString()

在字符串中,我需要用*替换第一个字符的所有实例,而不是实际替换第一个字符本身。一个例子是,让我说我有" Bobble&#34 ;;该函数将返回类似于" Bo ** le"。

6 个答案:

答案 0 :(得分:1)

>>> test = 'Bobble'    
>>> test = test[0] +''.join(l if l.lower() != test[0].lower() else '*' for l in test[1:])
>>> print test

Bo**le

答案 1 :(得分:1)

userString[0] + userString[1:].replace(userString[0], "*")

答案 2 :(得分:1)

你也可以使用正则表达式:

test package

演示:

import re

def ign_first(s, repl):
    return re.sub(r"(?<!^){}".format(s[0]), repl, s, flags=re.I)

或者将In [5]: s = "Bobble" In [6]: ign_first(s, "*") Out[6]: 'Bo**le' 与集合一起使用:

str.join

演示:

def ign_first(s, repl):
    first_ch = s[0]
    st = {first_ch, first_ch.lower()}
    return first_ch + "".join([repl if ch in st else ch for ch in s[1:]])

答案 3 :(得分:0)

我会使用切片和lower()

>>> test = 'Bobble'
>>> test[0] + test[1:].lower().replace(test[0].lower(), '*')
'Bo**le'

答案 4 :(得分:0)

无需使用其他变量

>>> st='Bobble'
>>> st=st[0]+st[1:].lower().replace(st[0].lower(),'*')
>>> st
'Bo**le'

答案 5 :(得分:0)

使用正则表达式的不区分大小写的解决方案:

import re

string = "Bobble"

outcome = string[0]+re.sub(string[0].lower() + '|' + string[0].upper(), 
                           "*", string[1:].lower())

>>>
Bo**le