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