#python #string #replace #lowercase
#python #строка #заменить #нижний регистр
Вопрос:
>>> import string
>>> word = "hello."
>>> word2 = word.replace(string.lowercase, '.')
>>> print word2
hello.
Я просто хочу, чтобы все строчные буквы превратились в точки.
Что я здесь делаю не так?
Ответ №1:
Используйте регулярное выражение:
from re import sub
print sub("[a-z]", '.', "hello.")
str.replace
ищет строку abcdefghijklmnopqrstuvwxyz
для ее замены .
, а не ищет каждую отдельную букву для замены.
Ответ №2:
вы должны использовать string.translate()
:
>>> import string
>>> input = 'abcABCaAbBcC'
>>> input.translate(string.maketrans(string.lowercase, '.'*26))
'...ABC.A.B.C'
string.maketrans()
функция — это функция, которая помогает построить отображение, подходящее для string.translate()
функции.
в качестве альтернативы, вы можете просто перебирать строку, используя генератор:
>>> str.join('', ('.' if chr.islower() else chr for chr in input))
'...ABC.A.B.C'
Комментарии:
1. Идиоматически это было бы просто
''.join('.' if chr.islower() else chr for chr in input)
.2. @agf: да, но я всегда чувствовал
''.join(...)
, что читает в обратном направлении. поэтому я всегда используюstr.join('', ...)
.
Ответ №3:
string.lowercase
есть 'abcdefghijklmnopqrstuvwxyz'
. Ваш код заменяет каждое вхождение всей этой 26-буквенной строки на точку.
Вместо этого вы хотите использовать функцию re
модуля sub
:
import re
word = "hello."
word2 = re.sub('[a-z]', '.', word)
print word2
Ответ №4:
Вы пытаетесь заменить строку «abc … xyz» вместо замены каждой строчной буквы. Вы можете достичь желаемого результата несколькими способами:
Регулярные выражения
from re import sub
sub("[a-z]", '.', "hello.")
Символ за символом
"".join('.' if l.islower() else l for l in word)
Ответ №5:
я не думаю, что вы можете использовать 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
'......'
Комментарии:
1. Он специально говорит строчные буквы , поэтому
w
не подходит.