Python - замена строчных букв - PullRequest
2 голосов
/ 30 октября 2011
>>> import string
>>> word = "hello."
>>> word2 = word.replace(string.lowercase, '.')
>>> print word2
hello.

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

Что я здесь не так делаю?

Ответы [ 5 ]

5 голосов
/ 30 октября 2011

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

from re import sub

print sub("[a-z]", '.', "hello.")

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

4 голосов
/ 30 октября 2011

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

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

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

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

>>> str.join('', ('.' if chr.islower() else chr for chr in input))
'...ABC.A.B.C'
3 голосов
/ 30 октября 2011

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

Вместо этого вы хотите использовать модуль *1006*sub модуля *:1010 *

2 голосов
/ 30 октября 2011

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

Регулярные выражения

from re import sub
sub("[a-z]", '.', "hello.")

Char by char

"".join('.' if l.islower() else l for l in word)
1 голос
/ 30 октября 2011

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

>>> import re
>>> word = 'hello.'
>>> # the pattern you want to match
>>> ptn = r'[a-z]'
>>> # 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
  '......'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...