问:
如题,有个字符串“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精选 提问,建议,唠嗑。