我有一个自动生成的参考书目文件,用于存储我的参考文献。生成的文件中的citekey格式为xxxxx:2009tb
。有没有办法让程序检测到这样的模式并将citekey表单更改为xxxxx:2009
?
答案 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作为原始字符串,而不是转义序列。
希望这有帮助!