替换字符串中的字母(如果它们是字母串)

时间:2014-11-20 22:32:10

标签: python regex string

在问这个问题之前,我已经检查过我的问题是否有解决方案。

我正在做python。我正在尝试编写一个带有输入字符串的代码,并且该字符串中的每个字母都是元音(aeiou),将该元音替换为自身4次。然后在末尾添加一个感叹号(!)。例如:

然后

apple看起来像aaaappleeee!

我已多次尝试使此工作无效。想知道你们是否可以查看我的代码,看看我做错了什么。拥抱和亲吻。克里斯托弗

def exclamation (string):
    for i in range(0,len(string)):
        if string[i] in 'aeiou':
            string.replace(string[i],string[i*4])
        print(string + '!')

6 个答案:

答案 0 :(得分:0)

您可以使用正则表达式:

def exclamation(string):
    newString = re.sub(r'([aeiou])', r'\1\1\1\1', string)
    return newString + '!'

答案 1 :(得分:0)

字符串是不可变的,因此替换字符串每次都会返回一个新字符串。相反,只需像你一样构建一个字符串:

def exclamation (string):
    buildString = ""
    for i in range(0,len(string)):
        if string[i] in 'aeiou':
            buildString = buildString +string[i]*4
        else:
            buildString = buildString +string[i]
    print buildString+"!"

答案 2 :(得分:0)

def exclamation(string):
    new_string = ''
    for c in string:
        if c in 'aeiou':
            new_string += c * 4
        else:
            new_string += c
    new_string += '!'
    return new_string

答案 3 :(得分:0)

replace不修改现有字符串,它返回。在迭代它时,还有一件事情永远不会修改列表,字符串或字典。使用string作为变量名称是不好的做法。

def exclamation(my_string):
    new=''
    for i in range(0,len(my_string)):
        if my_string[i] in 'aeiou':
            new += my_string[i]*4
        else: new += my_string[i]
    print(new + '!')

输出:

>>> exclamation('abcdef')
aaaabcdeeeef!

使用lambdamap

>>> def exclamation(my_string):
...     return "".join(map(lambda x:x in 'aeiou' and x*4 or x,my_string))+'!'
... 
>>> exclamation('abcdef!')
'aaaabcdeeeef!'

答案 4 :(得分:0)

你可以迭代一个字符串,这样你就不必乱用范围,str.replace不会修改现有的字符串。总之,你可以这样做:

def exclamation(string):
    for c in "aeiou":
        string = string.replace(c, c*4)
    print(string + "!")

答案 5 :(得分:0)

您还可以使用列表理解:

>>> def exclamation(s):
...    return ''.join([x*4 if x in 'aeiou' else x for x in 'apple']) + '!'
... 
>>> exclamation('apple')
'aaaappleeee!'