编码Python列表以使用re模块

时间:2016-03-02 01:24:45

标签: python regex python-2.7 encode python-2.x

我有一个西班牙语的文本文件,因此它有数千个单词,其中一些带有重音符号。我使用re模块来提取一些单词,但是当我得到一个列表时,有些单词是不完整的。

这是我的代码的第一部分:

projectsinline = open('projectsinline.txt', 'r')

for lines in projectsinline:

    pattern = r'\b[a-zA-Z]{6}\b'
    words = re.findall(pattern, lines)

    print words

这是输出的一个例子:

['creaci', 'Estado', 'relaci', 'Regula', 'estado', 'comisi', 'delito']

应该是这样的:

['creación', 'Estado', 'relación', 'Regula', 'estado', 'comisión', 'delito']

我找到了这个答案:Encode Python list to UTF-8但它没有帮助,因为我的文字来自文本文件,因此我无法使用此代码:

import re
import codecs
import sys

sys.stdout = codecs.getwriter('UTF-8')(sys.stdout)

projectsinline = open('projectsinline.txt', 'r')

for lines in projectsinline:

    pattern = ur'\b[a-zA-Z]{6}\b'
    unicode_pattern = re.compile(pattern, re.UNICODE)
    result = unicode_pattern.findall(lines)
    print result

现在,输出会跳过具有重音的单词。

对于解决问题的任何建议表示赞赏?

谢谢!

1 个答案:

答案 0 :(得分:4)

您使用此r'\b[a-zA-Z]{6}\b'选择包含6个字母的字词, 你的例子中的一些单词有更多的字母,这些字母被切断,因为你的特殊符号被认为不是单词字符和单词边界。

如果您想要所有包含6个字母的单词,我会使用\w

  

将匹配字符[0-9_]以及任何被归类为的字符   Unicode字符属性数据库中的字母数字。

import re
import codecs

with codecs.open('projectsinline.txt', 'r', encoding="utf-8") as f:
    for line in f:
        unicode_pattern = re.compile(r'\b\w{6}\b', re.UNICODE)
        result = unicode_pattern.findall(line)
        for word in result:
            print word

示例字符串:

creación, longstring, lación, Regula, estado, misión

输出:

lación
Regula
estado
misión