>>> import string
>>> word = "hello."
>>> word2 = word.replace(string.lowercase, '.')
>>> print word2
hello.
我只想让所有的小写字母变成句号。
我在这里做错了什么?
答案 0 :(得分:5)
from re import sub
print sub("[a-z]", '.', "hello.")
str.replace
正在查找字符串abcdefghijklmnopqrstuvwxyz
以将其替换为.
,而不是查找要替换的每个字母。
答案 1 :(得分:4)
你应该使用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'
答案 2 :(得分:3)
string.lowercase
是'abcdefghijklmnopqrstuvwxyz'
。您的代码正在用句号替换整个26个字母的字符串。
相反,您希望使用re
模块sub
函数:
import re
word = "hello."
word2 = re.sub('[a-z]', '.', word)
print word2
答案 3 :(得分:2)
您正在尝试替换字符串“abc ... xyz”,而不是替换每个小写字母。 您可以通过以下几种方式实现所需结果:
正则表达式
from re import sub
sub("[a-z]", '.', "hello.")
char by char
"".join('.' if l.islower() else l for l in word)
答案 4 :(得分:1)
我不认为你可以使用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
'......'