【问题标题】:Encode Python list in order to use re module编码 Python 列表以使用 re 模块
【发布时间】:2016-06-14 16:33:21
【问题描述】:

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

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

有任何解决问题的建议吗?

谢谢!

【问题讨论】:

  • 你想用你的正则表达式模式中的{6}做什么?
  • re.compile(r"\w+", re.UNICODE) 适合您的情况吗?
  • {6} 只查找包含 6 个字母的单词
  • 我觉得我一定错过了什么。那为什么你的“应该是这样的”列表包含一堆超过 6 个字母的条目?
  • @univerio 如果我使用re.compile(r"\w+", re.UNICODE),它也不起作用,我得到另一个我不需要的字母数字标签。

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


【解决方案1】:

您正在使用此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

【讨论】:

  • 没错。我的错。输出显示不完整的单词,但它不应该显示它们,它应该找到类似的单词:例如:[ '...', 'código', '...' ]
  • 非常感谢,@minitoto。它可以工作,但输出如下所示:[...'T\xedtulo', '\xfaltimo', 'C\xf3digo', 'Fiscal', 'emitir', 'Fiscal', 'C\xf3digo'...]
  • 我添加了一些更改,列表中将包含 unicode 元素
  • 感谢您的帮助,@minitoto。我尝试了代码,但出了点问题,我收到了这个错误:UnicodeDecodeError: 'utf8' codec can't decode byte 0xd3 in position 22: invalid continuation byte
  • 我需要您的输入文件,或您遇到困难的部分文件,以便为您提供帮助
猜你喜欢
  • 2023-02-07
  • 1970-01-01
  • 1970-01-01
  • 2019-01-28
  • 1970-01-01
  • 2013-08-22
  • 2010-10-01
  • 1970-01-01
  • 2011-07-14
相关资源
最近更新 更多