我使用以下正则表达式从string
中删除非字母数字字符(不删除空格)。
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()
请注意:
答案 0 :(得分:1)
使用re.UNICODE
标志(至少在我的Python版本中,也没有它),类\w
包含许多“非英语”字母数字字符,例如希腊字母,变音符号,连字和其他。如果您也想删除它们,则不应使用\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 '