如何查找和替换字符串中的大写字母

815 查看

问:

如题,有个字符串“HeLLo Capital Letters”,我想将其中的大写字母替换成"_大写字母",即输出”_He_L_Lo _Capital _Letters“

我的解法是:

value = "HeLLo Capital Letters"

for word in value:

    if word.isupper():

        char = "_"

        value = value.replace(word,char + word)

print value

但是输出确是:_He___L___Lo _Capital ___Letters,哪里错了呢?

答1:

在每一步加一句打印,可以发现你的方法的执行步骤是这样的:

Replacing 'H' with '_H':

    _HeLLo Capital Letters

Replacing 'L' with '_L':

    _He_L_Lo Capital _Letters

Replacing 'L' with '_L':

    _He__L__Lo Capital __Letters

Replacing 'C' with '_C':

    _He__L__Lo _Capital __Letters

Replacing 'L' with '_L':

    _He___L___Lo _Capital ___Letters

可以看出在替换L时,因为L出现了两次,所以每次都会以 _L 进行替换,也执行了两次,加上最后一个单词的L,L一共替换了三次,所以结果中L前面是三个_

答2:

可以参考下re.sub

针对你的问题的代码如下:

>>> import re

>>> re.sub(r'([A-Z])', r'_\1', value)

'_He_L_Lo _Capital _Letters'

答3:

可以使用str.join方法,如果是大写字母则在前面加上_,否则保持原样

代码如下:

>>>s=  "HeLLo Capital Letters"

>>>print("".join(["_" + ch if ch.isupper() else ch for ch in s]))

_He_L_Lo _Capital _Letters

而且测试显示,这种方法要比答2中的正则方法快

原址:Find and replace the uppercase characters

欢迎到 @StackOverFlow精选 提问,建议,唠嗑。