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

使用Python删除包含非ascii字符的单词,python,python-unicode,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) def removeNonAscii(s): return”“.join(filter)(lambda x:ord(x)如果基于空格定义单词,类似这

我正在使用以下函数去除非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)
def removeNonAscii(s):

return”“.join(filter)(lambda x:ord(x)如果基于空格定义单词,类似这样的操作可能会起作用:

def containsNonAscii(s):
    return any(ord(i)>127 for i in s)

words = sentence.split()
cleaned_words = [word for word in words if  not containsNonAscii(word)]
cleaned_sentence = ' '.join(cleaned_words)
请注意,这会将重复的空白压缩为一个空格。

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

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

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

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

你的意思是删除非ascii字吗?检查字符串的所有字符,然后找到合适的字符。他的函数已经执行了
连接
。无需使用列表理解True,但我假设他的函数重新定义。这还不完全清楚……我还将在新版本中进行编辑。@JonClements无需。
decode()
不会引发任何其他异常。但正常。但是
decod
或键入错误的“us ascii”等…将…经验法则是总是捕捉你知道如何处理的东西,并让其他的传播直到它可以。一个除了
之外的裸露的
将捕捉并屏蔽一切,你所知道的只是你的函数返回了
假,即使它不应该如此等等。。。