编码 Python 列表以使用 re 模块

Encode Python list in order to use re module

我有一个西班牙语文本文件,所以它有数千个单词,其中一些带有重音。我正在使用 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

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

有什么解决问题的建议吗?

谢谢!

您正在使用此 r'\b[a-zA-Z]{6}\b' 挑选具有 6 个字母的单词, 您的示例中的某些单词有更多字母,这些字母被截断,因为您的特殊符号被视为不是单词字符并且单词边界有效。

如果您希望所有单词都包含 6 个字母,我会使用 \w

will match the characters [0-9_] plus whatever is classified as alphanumeric in the Unicode character properties database.

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