我有一個自動生成的參考書目文件存儲我的參考。生成文件中的citekey格式爲xxxxx:2009tb
。有沒有辦法使程序檢測到這種模式,並將citekey形式更改爲xxxxx:2009
?使用python編輯文本文件
回答
我不太清楚你想匹配哪種表達式,但是你可以使用正則表達式來構建一切,使用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()
爲什麼將文件分割成幾行?如果你正在採取這種方法,你可以做完整的文件。 – Mark
user996018可能想要捕獲(xxxxxx),而不是替換它。 RParadox,在處理文件而不是'open' /'close'時使用'with'。 –
OP顯然不想替換硬編碼的字符串'xxxxx:2009tb',但實際上是一個PATTERN,其中包含一些(未定義的)字符串,後跟冒號和年份日期以及一些字母。 – heltonbiker
實際上,你只是想在基準年後拆除兩個字母。假如我們能夠唯一標識的引用,冒號後面四個數字和兩個字母,比下面的正則表達式會工作(至少它在這個示例代碼工作):
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
解釋爲原始字符串,而不是作爲轉義序列。
希望這有助於!
- 1. 在Python中編輯文本文件
- 2. 用Python腳本編輯XML文件
- 3. 使用php編輯文本文件
- 4. 用Python編輯yaml文件
- 5. 使用Python編輯XML文件中的XML文本
- 6. 編輯使用python在線託管的文本文件
- 7. 使用文本編輯器編輯服務器中的文件
- 8. 使用python編輯csv文件
- 9. 使用Python編輯內聯CSV文件
- 10. 使用Python編輯.html文件?
- 11. 使用Python編輯和保存文件
- 12. 使用python編輯.odt文件
- 13. 使用Python編寫文本文件
- 14. C++編輯文本文件
- 15. 編輯文本文件?
- 16. 編輯文本文件
- 17. 編輯文本文件dojo
- 18. C#編輯文本文件
- 19. 文本文件編輯C
- 20. 使用宏編輯文本
- 21. 使用shell腳本編輯plist文件
- 22. 使用shell腳本編輯文件
- 23. 性能 - python文本文件編輯2GB文件
- 24. 使用批處理文件編輯文件中的文本
- 25. 在Windows下使用批處理文件編輯文本文件
- 26. 使用臨時文件在文本文件中編輯行C
- 27. 使用批處理文件編輯文本文件
- 28. 的Python:編輯多個文件:文件
- 29. 編輯文本文件用awk/sed的
- 30. 如何用JavaScript編輯文本文件?
使用python regexp,逐行讀取文件並獲取字符串,然後替換它http://www.tutorialspoint.com/python/string_replace.htm – linello
簡單替換:2009tb with:2009將不起作用您? –
只有一個例子很難得到一個模式。你可以發表5到10個不同的出現的這些參考文獻,以及相應的期望輸出。 – heltonbiker