Python 剥离非字母数字字符后获取它们

Python 剥离非字母数字字符后获取它们,python,Python,我使用下面的正则表达式从字符串中去除非字母数字字符(不删除空格) pattern = re.compile('([^\s\w]|_)+', re.UNICODE) 但是,在过滤之后,我仍然会得到以下字符串: √ß √§√§√§ √° √° √† √•√Æ √≤√´√¢√°√§ √∂√® √£√≥√ª√•√º√¥√ß √±√π√º √ß √ß √¥√π√± √∂√π√Æ √≠√Æ√™√Ø√Æ √Æ√Ø√°√¨√µ√°√≠√∂ √π√®√µ√°√≠√∂ √≤√≠√≠√≤√™ √µ√°√≠√

我使用下面的正则表达式从
字符串
中去除非字母数字字符(不删除空格)

pattern = re.compile('([^\s\w]|_)+', re.UNICODE)
但是,在过滤之后,我仍然会得到以下字符串:

ç
 äää  á  á
à
 åî òëâáä
öè
ãóûåüôç ñùü
ç ç
ôùñ öùî íîêïî
îïáìõáíö
ùèõáíö
òííòê õáíö
ø â áí
åîæíî
ííö ùîòõàä
ä
 èèñ ñùü
èèñ ñùü
äóòåô êã
ïùùïäó ñùü
üíûçôñó ñùü
如何使用正则表达式处理它们?我希望上面的字符串在删除非字母数字字符后成为空字符串

我有一个我正在尝试预处理的用户查询列表。我提供的相关代码片段如下所示

query_text = ' '.join([pattern.sub(' ', word) for word in tokens[1].lower().split()])
query_text = query_text.strip()
请注意:

  • 我要处理的问题是除去给定字符串的空格以外的任何非字母数字字符
  • 删除基于英语的非字母数字字符

带有
re.UNICODE
标志(至少在我的Python版本中,也没有它),类
\w
包含许多“非英语”字母数字字符,如希腊字母、umlauts、连字和其他字符。如果也要删除这些字符,则不应使用
\w
,而应使用更“明确”的字符类,如
a-zA-Z0-9

>>> pattern = re.compile('([^\s\w]|_)+', re.UNICODE)
>>> pattern.sub("", text)
'ß\n     \n\n Æ \n\nªºß πº\nß ß\nπ πÆ ÆØÆ\nÆص\nπµ\n µ\n  \nÆÆ\n πƵ\n\n  πº\n πº\n \nØππØ πº\nºªß πº'
>>> pattern = re.compile('[^\sa-zA-Z0-9]+', re.UNICODE)
>>> pattern.sub("", text)
'\n     \n\n  \n\n \n \n  \n\n\n \n  \n\n \n\n  \n \n \n \n '
或者您可以显式设置
re.ASCII
标志,以便
\w
实际上等同于
[a-zA-Z0-9]

>>> re.sub("[^\s\w]", "", text, flags=re.UNICODE)
'ß\n     \n\n Æ \n\nªºß πº\nß ß\nπ πÆ ÆØÆ\nÆص\nπµ\n µ\n  \nÆÆ\n πƵ\n\n  πº\n πº\n \nØππØ πº\nºªß πº'
>>> re.sub("[^\s\w]", "", text, flags=re.ASCII)
'\n     \n\n  \n\n \n \n  \n\n\n \n  \n\n \n\n  \n \n \n \n '

只需显示编译表达式的代码。“你实际使用的代码在哪里?”布伦巴恩补充道。不清楚你想做什么。这里的过滤是什么?
pattern.sub
?基于哪种语言的非字母数字字符?英语/拉丁语?我正在尝试删除基于英语的非字母数字字符。是的,
模式.sub
是这里的过滤过程。