每日10行代码126:用正则表达式批量去掉中书的注释

今天在看传习录时,发现一个电子版里面有译文,是下面这样的:

【七一】
问:“心要逐物,如何则可?”
先生曰:“人君端拱清穆,六卿分职,天下乃治。心统五官,亦要如此。今眼要视时,心便逐在色上;耳要听时,心便逐在声上。如人君要选官时,便自去坐在吏部;要调军时,便自去坐在兵部。如此,岂惟失却君体,六卿亦皆不得其职。”
【译文】
陆澄问:“心要去追逐外物,该怎么办?”
先生说:“君主庄严肃穆,垂拱而坐,六卿各司其职,天下才能得到治理。心统摄五官,也要如此。如果眼睛要看时,心便在追逐颜色上;耳朵要听时,心便在追逐声音上。就好比君主要选任官员时,便去吏部;要调用军队时,又去兵部。如果这样,不但君主失去了君主的体统,六卿也无法各司其职。”

【七二】 “善念发而知之,而充之;恶念发而知之,而遏之。知与充与遏者,志也,天聪明也。圣人只有此,学者当存此。” 【译文】
先生所说:“善念萌发时要认识它、扩充它;恶念萌发时,要认识它、遏制它。认知、扩充、遏制,都是意志的作用,都是天所赋予的聪明才智。圣人也只是有这个意志,学者应当时刻存养这个意志。”

但我不想看译文,因为这些译文翻译的也不一定好,有可能会失去本来的意义。于是我就用python把译文去掉,代码如下:

import re,pprint
path = r'C:\Users\coon\Downloads\传习录-排版很好带注释的版本.txt'

with open(path,encoding='utf-8') as f:
    s = f.read()

    pat = r'(【译文】[\s\S]*?)【'
    result = re.findall(pat,s)
    target = s
    for i in result:
        target = target.replace(i,"\n\n")

f2 = open(r'd:\test0322.txt','w',encoding='utf-8')
f2.write(target)
f2.close()

注意:

  1. 因为我发现一般译文都 是从"【译文】“开始,到下一个”【"处结束,所以用的正则是r'(【译文】[\s\S]*?)【'
  2. re.sub不能正确指定匹配的分组,这里用时会出错,所以我用了re.findall。
上一篇:2021年Android大厂面试分享,保准看明白!


下一篇:Excel按区间查询,大咖有句悄悄话