python命令string.replace(old,lower(),' something')返回旧字符串

时间:2016-01-15 14:45:52

标签: python python-2.7 str-replace

s1 = 'GSHMGLYELSASNFELHVAQGDHFIKFFAPWCGHCKALAPTWEQLALGLEHSETVKIGKVDbTQHYELbSGNQVRGYPTLLWFRDGKKVDQYKGKRDLESLREYVESQLQR' 

这是一个字符串我想将小写字母替换为某个大写字母,比如说' C'。我正在使用的命令是:

string.replace(s1, s1.lower(), 'C'), 

问题:结果字符串仍然与旧字符串相同,b是' b'而不是' C'

4 个答案:

答案 0 :(得分:2)

目前,您正在尝试使用'C'替换整个字符串的小写副本。你似乎也没有将string.replace的结果分配给任何东西,这是行不通的。 replace不会在适当的位置进行修改,它会返回应用了替换项的字符串的新副本。

您需要遍历字符串并替换任何小写字母。

s1 = 'GSHMGLYELSASNFELHVAQGDHFIKFFAPWCGHCKALAPTWEQLALGLEHSETVKIGKVDbTQHYELbSGNQVRGYPTLLWFRDGKKVDQYKGKRDLESLREYVESQLQR'
replaced_string = ''.join(x if x.isupper() else 'C' for x in s1)

答案 1 :(得分:1)

对于简单的“替换”方法,您的条件太复杂了。请改用regexp:

import re    
s1 = "GaHMxLYELmASNFElHVAQG"
s2 = re.sub(r"[a-z]", "C", s1)
print s2

将打印“GCHMCLYELCASNFECHVAQG”

[a-z]表示“从a到z的任何字母” - 如果需要,为您的语言添加额外的低位字母。例如,对于俄语,这种模式将是:[a-zа-я]

答案 2 :(得分:1)

string.replace(s1, s1.lower(), 'C')

将替换为' C'只有整个字符串

gshmglyelsasnfelhvaqgdhfikffapwcghckalaptweqlalglehsetvkigkvdbtqhyelbsgnqvrgyptllwfrdgkkvdqykgkrdleslreyvesqlqr

如果你想用字符串中的给定属性替换所有字符,我建议使用regular expressions,在你的情况下它将是:

s2 = re.sub("[a-z]", "C", s1)

答案 3 :(得分:1)

s1.lower()等于

>>> s1.lower()
'gshmglyelsasnfelhvaqgdhfikffapwcghckalaptweqlalglehsetvkigkvdbtqhyelbsgnqvrgyptllwfrdgkkvdqykgkrdleslreyvesqlqr'

所以string.replace(s1, s1.lower(), 'C')在字符串c1中搜索整个小写字符串的任何出现,如果找到任何字符串,则用'C'替换每个字符串。

请注意,string.replace也是字符串本身的一种方法,因为Python 2.0左右,s1.replace(s1.lower(), 'C')会做同样的事情。

您可以使用翻译表:

>>> from string import maketrans, lowercase
>>> trans_table = maketrans(lowercase, 'C' * len(lowercase))
>>> s1.translate(trans_table)

Maketrans获取两个长度相等的字符串,而translate()会将第一个字符的每个出现转换为第二个字符的等效字符。

lowercase'abcdefghijklmnopqrstuvwxyz',' C' * len(小写)只是一个26 Cs的字符串。