使用python编辑文本文件

时间:2012-11-07 11:29:03

标签: python text

我有一个自动生成的参考书目文件,用于存储我的参考文献。生成的文件中的citekey格式为xxxxx:2009tb。有没有办法让程序检测到这样的模式并将citekey表单更改为xxxxx:2009

2 个答案:

答案 0 :(得分:1)

我不太清楚你想要匹配哪个表达式,但你可以使用import re和re.sub构建所有的regex,如图所示。 [0-9] * 4恰好匹配4个数字。 (编辑,纳入建议)

import re                                                                                                                                                                                          

inf = 'temp.txt'                                                                                      
outf = 'out.txt'                                                                                      

with open(inf) as f,open(outf,'w') as o:                                                              
    all = f.read()                                                                                    
    all = re.sub("xxxxx:[0-9]*4tb","xxxxx:tb",all) # match your regex here                                                  
    o.write(all)                                                                                      
    o.close()                                  

答案 1 :(得分:0)

您实际上只想在参考中删除一年后的两个字母。假设我们可以唯一地将引用标识为冒号后跟四个数字和两个字母,那么下面的正则表达式将起作用(至少它在这个示例代码中起作用):

import re

s = """
according to some works (newton:2009cb), gravity is not the same that
severity (darwin:1873dc; hampton:1956tr).
"""

new_s = re.sub('(:[0-9]{4})\w{2}', r'\1', s)
print new_s

说明:“匹配冒号:后跟四个数字[0-9]{4},后跟任意两个”单词“字符\w{2}。括号只捕获您要保留的部分,{ {1}}意味着你要用第一个(也是唯一的)括号组中的一小部分来替换每个匹配。字符串之前的r'\1'是因为有必要解释{{1作为原始字符串,而不是转义序列。

希望这有帮助!