在Python中用X替换小写ASCII字符

时间:2014-06-09 16:49:15

标签: python string replace

用字符串中的'X'替换小写字符最干净,最Pythonic的代码是什么?例如,ABCDEFGhijklmnopQRSTUVwxyz将变为ABCDEFGXXXXXXXXXQRSTUVXXXX

3 个答案:

答案 0 :(得分:5)

我为此使用str.translate();轻松最快的方法。正则表达式无法触及此速度。

Python 2版本:

import string

map = string.maketrans(string.ascii_lowercase, 'X' * len(string.ascii_lowercase))
mapped = inputstring.translate(map)

Python 3版本:

import string

map = str.maketrans(dict.fromkeys(string.ascii_lowercase, 'X'))
mapped = inputstring.translate(map)

演示(Python 2):

>>> import string
>>> inputstring = 'ABCDEFGhijklmnopQRSTUVwxyz'
>>> map = string.maketrans(string.ascii_lowercase, 'X' * len(string.ascii_lowercase))
>>> inputstring.translate(map)
'ABCDEFGXXXXXXXXXQRSTUVXXXX'

str.translate() 订单更快

>>> import timeit
>>> import re
>>> def regex_replace(s, _sub=re.compile(r'[a-z]').sub):
...     return _sub('X', s)
... 
>>> regex_replace(inputstring)
'ABCDEFGXXXXXXXXXQRSTUVXXXX'
>>> timeit.timeit('f(s)', 'from __main__ import regex_replace as f, inputstring as s')
2.6076979637145996
>>> timeit.timeit('s.translate(m)', 'from __main__ import inputstring as s, map as m')
0.13378620147705078

str.translate()版本可以更快地完成 20次的任务。

答案 1 :(得分:4)

非常简单:

>>> import re
>>> S='ABCDEFGhijklmnopQRSTUVwxyz'
>>> re.sub('[a-z]', 'X', S)
'ABCDEFGXXXXXXXXXQRSTUVXXXX'

答案 2 :(得分:3)

您可以使用正则表达式:

import re
output = re.sub( r'[a-z]', 'X', inputString )