Python – замена строчных букв

>>> import string >>> word = "hello." >>> word2 = word.replace(string.lowercase, '.') >>> print word2 hello. 

Я просто хочу, чтобы все строчные буквы превратились в полные остановки.

Что я здесь делаю неправильно?

Используйте регулярное выражение :

 from re import sub print sub("[az]", '.', "hello.") 

str.replace ищет строку abcdefghijklmnopqrstuvwxyz чтобы заменить ее . , не ища каждого отдельного письма для замены.

вы должны использовать string.translate() :

 >>> import string >>> input = 'abcABCaAbBcC' >>> input.translate(string.maketrans(string.lowercase, '.'*26)) '...ABC.ABC' 

string.maketrans() – это функция, которая помогает создать сопоставление, подходящее для функции string.translate() .

альтернативно, вы можете просто перебирать строку, используя генератор:

 >>> str.join('', ('.' if chr.islower() else chr for chr in input)) '...ABC.ABC' 

string.lowercase – это 'abcdefghijklmnopqrstuvwxyz' . Ваш код заменяет все происшествия всей 26-буквенной строки полной остановкой.

Вместо этого вы хотите использовать re module:

 import re word = "hello." word2 = re.sub('[az]', '.', word) print word2 

Вы пытаетесь заменить строку «abc … xyz» вместо замены каждой строчной буквы. Вы можете добиться желаемого результата несколькими способами:

Обычные выражения

 from re import sub sub("[az]", '.', "hello.") 

Char by char

 "".join('.' if l.islower() else l for l in word) 

я не думаю, что вы можете использовать r * eplace * для такого сопоставления, но вы можете делать то, что хотите, с простым регулярным выражением:

 >>> import re >>> word = 'hello.' >>> # the pattern you want to match >>> ptn = r'[az]' >>> # compile the pattern >>> pat_obj = re.compile(ptn) >>> # use the "sub" method to replace text based on a pattern >>> w2 = pat_obj.sub(".", word) >>> w2 '......'