Есть простой, простой способ превратить эту строку:Python заменить все символы верхнего регистра в строке с *
"aBCd3Fg"
Into:
"a**d3*g"
В Python 2.7?
Есть простой, простой способ превратить эту строку:Python заменить все символы верхнего регистра в строке с *
"aBCd3Fg"
Into:
"a**d3*g"
В Python 2.7?
Не уверен, насколько быстро вам это нужно, но если вы ищете самое быстрое решение там. translate
функция Строковый модуля Python является немного более окольным, хотя в целом более производительным способом:
import string
transtab = string.maketrans(string.uppercase, '*'*len(string.uppercase))
"aBCd3Fg".translate(transtab)
>>>'a**d3*g'
Я всегда удивляюсь, как много людей не знают об этой хитрости. Один из самых охраняемых секретов в питона IMO
import re
print re.sub(r'[A-Z]', '*', "aBCd3Fg")
string = ''.join(['*' if x.isupper() else x for x in string])
Забавный факт: Если вы долго условного оператора C-стиле, вы можете сократить ваше выражение '«*», если г == r.upper() еще r' с эквивалент '(r, '*') [r.isupper()]'. –
@DarrenStone - Это удалит свойство короткого замыкания троичного, а также займет больше времени для обработки. :) – iCodez
@DarrenStone, я знаю об этом синтаксисе, но на него обычно нахмурились большинство пользователей python. – smac89
Вы также можете сделать:
for x in myString:
if (x == 'A','B','C','D','E','F','G','H','I','J','K','L','M',
'N','O','P','Q','R','S','T','U','V','W','X','Y','Z'"
x = '*'
Это небольшой фрагмент кода, который будет выполнять работу.
Простое решение:
input = "aBCd3Fg"
output = "".join(['*' if 'A' <= char <= 'Z' else char for char in input ])
#Long version
input = "aBCd3Fg"
output = ''
for char in input:
output = output + '*' if ord('A') <= ord(char) <= ord('Z') else output + char
print output
Это была бы моя рекомендация. – mgilson
@mgilson Рад это слышать, менее багги, чем регулярное выражение, и 2-5 так же быстро, а также чуть ниже сложности. –