如题,有个字符串“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,哪里错了呢?
在每一步加一句打印,可以发现你的方法的执行步骤是这样的:
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前面是三个_
可以参考下re.sub
针对你的问题的代码如下:
>>> import re
>>> re.sub(r\'([A-Z])\’, r\’_\\1\’, value)
\’_He_L_Lo _Capital _Letters\’
可以使用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精选 提问,建议,唠嗑。