我想在文本文件中的每个单词和符号之间加上引号。
例如;
TürkiyeyadaresmîadıylaTürkiyeCumhuriyeti,topraklarınınbüyük bölümüAnadolu'ya,küçükbirbölümüiseBalkanlar'ınuzantısıolan Trakya'yayayılmışbirülke。
变成 - >
“Türkiye”“ya”“da”“resm”“”adıyla“”Türkiye“”Cumhuriyeti“”,“ “topraklarının”“büyük”“bölümü”“Anadolu'ya”“,”“küçük”“bir” “bölümü”“ise”“Balkanlar'ın”“uzantısı”“olan”“Trakya'ya”“yayılmış” “bir”“ülke”“。”
出于这个原因,我写了这样的代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re, codecs, io
with io.open ("turkish.txt", "r", encoding="utf-8") as myfile:
text=myfile.read()
replacer = re.compile("([\w'-]+|[.,!?;()%])", re.UNICODE)
output_text = replacer.sub(r'"\1"', text).replace('""','" "')
text_file = open("Output.txt", "w")
text_file.write(output_text.encode('utf8'))
text_file.close()
在上面的示例中,替换正常。
但是对于这样的例子,
İmparatorlukzirvesini15 ve17'ininrasında,özelikleI.Süleyman döneminde10.000'lerdeyaşadı。
替换发生如下;
“İmparatorluk”“zirvesini”“15”“ve”“17”“”nin“”arasında“, “özelikle”“我”“。” “Süleyman”“döneminde”“10”“。” “000'”“lerde” “yaşadı”“。”
如您所见,10.000
是一个数字,17'nin
在一起,而I.
是指罗马数字排名,所以我希望它们分开为
10.000
,17'nin
和I.
。
我应该如何修改我的正则表达式或代码来实现它?
谢谢,
答案 0 :(得分:1)
将[IVXLCDM]+\.|[\d\.]+(?:'\w+)?
添加到正则表达式模式的开头与“10.000”和“10.000'lerde”和“I”匹配。如预期的那样。
replacer = re.compile(r"\b([IVXLCDM]+\.|[\d\.]+(?:'\w+)?|[\w'-]+|[.,!?;()%])", re.UNICODE)
答案 1 :(得分:1)
with open("turkish.txt", "r") as myfile:
text=myfile.read()
output_text = text.split(" ")
with open("Output.txt", "w",) as outfile:
for word in output_text:
outfile.write(' "'+ word + '" ')
可能是更好的解决方案