Python - 替换小写字母

时间:2011-10-30 14:33:45

标签: python string replace lowercase

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

我只想让所有的小写字母变成句号。

我在这里做错了什么?

5 个答案:

答案 0 :(得分:5)

使用regular expression

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
  '......'