用 Python 编程,使用不同的方法来完成同一个目标,有时候是一件很有意思的事情。 这让我想起鲁迅笔下的孔乙己。 孔乙己对于茴香豆的茴字的四种写法颇有研究。我不敢自比孔乙己,这里搜集一些 Python 的茴香豆,以飨各位码农。

在 Python 如何替换字符串呢?

茴香豆一: replace

字符串对象自带一个 replace 方法,其定义是: str.replace(old, new[, count]) 。 第一个参数是旧字符串,第二个参数是新字符串,第三个参数是替换的最多次数。 下面的例子是把“ mouse ”替换为“ cat ”: ,最替换 3 次。

>>> cat_mouse = "cat mouse cat mouse cat mouse cat mouse"
>>> print(cat_mouse.replace("mouse", "cat"))
cat cat cat cat cat cat cat cat

下面的例子是把“ mouse ”替换为“ cat ”,最替换 2 次:

>>> print(cat_mouse.replace("mouse", "cat", 2))
cat cat cat cat cat mouse cat mouse

茴香豆二: translate

字符串对象还自带一个 translate 方法,可以根据一个对照表,同时替换多个字符。 但是有一个限制,被替换的旧字符的长度只能是 1 。

>>> cat_mouse = "cat mouse cat mouse cat mouse 小猫 老鼠"
>>> trans_table = {'c': 'CC', 'm': 'M', '小': None}
>>> print(cat_mouse.translate(str.maketrans(trans_table)))
CCat Mouse CCat Mouse CCat Mouse  老鼠

translate 方法一般要搭配字符串自带的 maketrans 方法使用。 maketrans 方法定义是: static str.maketrans(x[, y[, z]])maketrans 方法的参数可以是 1 - 3 个。 当只有一个参数时,这个参数必须是一个字典。该字典的键可以是 Unicode 代码 (整数)或者单个字符(长度为 1 的字符串)。 该字典的对应值可以是 Unicode 代码(整数)或者任意长度的的字符串。 当使用两个参数时,两个参数必须是同等长度字符串, x 参数中的每个字符会转换 为 y 参数中相对应的字符。 如果有第三个参数,那么第三个参数必须是字符串,该参数中的每个字符会被替换为 None ,即被删除。示例:

>>> print(cat_mouse.translate(str.maketrans('cm' , 'CM', '小老')))
Cat Mouse Cat Mouse Cat Mouse  

茴香豆三: re.sub 和 re.subn

re.sub 的定义为: re.sub(pattern, repl, string, count=0, flags=0) 。 熟悉正则表达式的,可以使用这种方式。 不熟悉的,还是不要用了。因为学会了正则表达式之后,麻烦只会更多。

>>> import re
>>> cat_mouse = "cat mouse cat mouse cat mouse 小猫 老鼠"
>>> print(re.sub('[a-c]', 'ABC', cat_mouse))
ABCABCt mouse ABCABCt mouse ABCABCt mouse 小猫 老鼠

re.subn 与 re.sub 类似,不同的是会返回一元组。该元组第一个元素是被替换后的 字符串,第二个元素是被替换的次数。 示例如下:

>>> cat_mouse = "cat mouse cat mouse cat mouse 小猫 老鼠"
>>> print(re.subn('[a-c]', 'ABC', cat_mouse))
('ABCABCt mouse ABCABCt mouse ABCABCt mouse 小猫 老鼠', 6)

茴香豆四: 剑走偏峰

有时候,我们需要一点想像力,否则这个世界就太无趣了。

>>> cat_mouse = "cat mouse cat mouse cat mouse 小猫 老鼠"
>>> print('CAT'.join(cat_mouse.split('cat')))
CAT mouse CAT mouse CAT mouse 小猫 老鼠