0

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

4

2 回答 2

1

我不太清楚您要匹配哪个表达式,但是您可以使用正则表达式构建所有内容,如图所示使用 import re 和 re.sub。[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()                                  
于 2012-11-07T11:37:44.553 回答
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}。括号仅捕获您要保留的部分,r'\1'这意味着您将每个完整匹配替换为第一个 (并且唯一的) 括号组。r字符串之前存在,因为有必要将其解释\1为原始字符串,而不是转义序列。

希望这可以帮助!

于 2012-11-08T15:27:10.013 回答