使用Python删除包含非ascii字符的单词

时间:2016-12-13 16:33:00

标签: python python-unicode

我使用以下函数去掉非ascii字符

def removeNonAscii(s): 
    return "".join(filter(lambda x: ord(x)<128, s))

def removeNonAscii1(s): 
    return "".join(i for i in s if ord(i)<128)

如果它包含任何非ascii字符,我现在想删除整个单词。我想过测量前后功能应用的长度,但我相信有一种更有效的方法。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

如果您根据空格定义单词,这样的内容可能会起作用:

Listen 82

请注意,这会将重复的空格折叠到一个空格中。

答案 1 :(得分:0)

最干净(但不一定最有效)的方法是将单词转换为二进制,尝试将其解码为ASCII。如果尝试失败,则该单词具有非ASCII字符:

def is_ascii(w):
  try:
    w.encode().decode("us-ascii")
    return True
  except UnicodeEncodeError:
    return False

答案 2 :(得分:0)

我想出了以下功能。我删除了包含任何ASCII字符的所有单词,但可能会根据需要扩展范围。

def removeWordsWithASCII(s):
    " ".join(filter(lambda x: not re.search(r'[\x20-\x7E]', x), s.split(' ')))