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

python command string.replace(old, lower(), 'something') returns old string

s1 = 'GSHMGLYELSASNFELHVAQGDHFIKFFAPWCGHCKALAPTWEQLALGLEHSETVKIGKVDbTQHYELbSGNQVRGYPTLLWFRDGKKVDQYKGKRDLESLREYVESQLQR' 

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

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

问题:结果字符串还是和原来的一样,b是'b'而不是'C'

目前,您正在尝试用 'C' 替换整个字符串的小写副本。您似乎也没有将 string.replace 的结果分配给任何东西,这是行不通的。 replace 没有就地修改,它 returns 应用了替换的字符串的新副本。

您需要遍历字符串并替换所有小写字母。

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

您的条件对于简单的 "replace" 方法来说太复杂了。请改用正则表达式:

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

它将打印"GCHMCLYELCASNFECHVAQG"

[a-z] 表示 "any letter from a to z" - 如果需要,为您的语言添加额外的小写字母。例如,对于俄语,此模式为:[a-zа-я]

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

将仅用 'C' 替换 整个 字符串

gshmglyelsasnfelhvaqgdhfikffapwcghckalaptweqlalglehsetvkigkvdbtqhyelbsgnqvrgyptllwfrdgkkvdqykgkrdleslreyvesqlqr

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

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

s1.lower() 等于

>>> s1.lower()
'gshmglyelsasnfelhvaqgdhfikffapwcghckalaptweqlalglehsetvkigkvdbtqhyelbsgnqvrgyptllwfrdgkkvdqykgkrdleslreyvesqlqr'

因此 string.replace(s1, s1.lower(), 'C') 在字符串 c1 中搜索整个小写字符字符串的任何出现,如果找到任何一个,则将每个小写字符替换为 'C'

请注意,自从 Python 2.0 左右以来,string.replace 也是字符串本身的一种方法,s1.replace(s1.lower(), 'C') 会做完全相同的事情。

你可以使用翻译table:

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

Maketrans 采用两个长度相等的字符串,然后 translate() 将第一个字符中出现的每个字符翻译为第二个字符中的等效字符。

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