python - 为文本文件中的每个单词和符号添加引号

时间:2016-08-19 09:44:12

标签: python regex

我想在文本文件中的每个单词和符号之间加上引号。

例如;

  

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.00017'ninI.

我应该如何修改我的正则表达式或代码来实现它?

谢谢,

2 个答案:

答案 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 + '" ')

可能是更好的解决方案