用 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 小猫 老鼠