2022年4月27日 06:06 by wst
python小技巧最近在看一本书(Python 从入门到项目实战),巩固下自己的知识,但发现课后题(P121)的答案(用replace和切片操作实现)竟然不用本章讲的内容(正则替换)。
经过探索给出我的答案。完整如下:
题目:
杰夫•贝佐斯是谁?他是全球最大的网上书店Amazon(亚马逊)的创始人,是美国最具创新力、最令人生畏的企业领导者。2018年3月6日,福布斯2018富豪榜发布,杰夫•贝佐斯以1120亿美元的身价超越另一个程序员比尔•盖茨成为世界首富。他对《福布斯》表示,自己的发展之路才刚刚开始。
编写一个Python程序,将字符串“2018 Amazon Jeff Bezos 1120”进行操作,实现如下功能:
(1)去掉字符串中的2018字符串,得到字符串:“Amazon Jeff Bezos 1120”。
(2)将字符串中的数字提取出来,得到字符串:“20181120”。
(3)将字符串中的数字部分用【】括起来,得到字符串:“【2018】 Amazon Jeff Bezos【1120】”。
(4)去除字符串中所有空格,得到字符串:“2018AmazonJeffBezos1120”。
(5)将字符串中的数字乘以2倍,得到字符串:“4036AmazonBezos2240”。
(6)将字符串“bezos”添加到字符串“要么创新,要么杰夫•贝索斯会替你做”中“杰夫•贝索斯”后面,并用括号括起来。得到字符串:“要么创新,要么杰夫•贝索斯(Jeff Bezos)会替你做”。
我的答案:
import re
def func1():
str = "2018 Amazon Jeff Bezos 1120"
print("res1:", re.sub('2018 ', '', str))
res = re.findall(r'\d+', str)
print("res2:", ''.join(res))
res = re.sub(r'(\d+)', '【\\1】', str)
print("res3:", res)
res = re.sub(" ", '', str)
print("res4:", res)
res = re.findall(r"\d+", str)
pre = re.sub('\d+', "{}", str)
print("res5:", pre.format(*[int(e)*2 for e in res]))
new_str = "要么创新,要么杰夫•贝索斯会替你做"
res = re.sub("(.*?)杰夫•贝索斯(.*?)", "\\1杰夫•贝索斯(Jeff Bezos)\\2", new_str)
print("res6:", res)
if __name__ == "__main__":
func1()
最后一小题的逻辑稍微复杂,这里做个解释:
1. 先得到所有的数字字符串
2. 再把数字字符串替换为占位符;
3. 把得到的数字字符串乘以2之后,填充到占位符里。
如果你发现了更好的方法,欢迎评论!