python - 剥离后获取非字母数字字符

标签 python

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

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 包含许多“非英语”字母数字字符,例如希腊字母、变音符号、连字等。如果您也想删除这些字符,则不应使用 \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 '

关于python - 剥离后获取非字母数字字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48028356/

相关文章:

python - 基于缩放级别的服务器端坐标集群

python - Pandas :基于局部极小值极大值的数据之字形分割

python - 如何查询 Google App Engine 数据存储并将结果传递到新页面?

python - 使用 django-admin.py 时出错

python - 从 virtualenv bin 内部运行 python 脚本不起作用

python - Beautiful Soup 4中如何处理<br></br>和<br/>?

python - python中的加权随机样本

python - 正则表达式未按预期运行

python - 如何在最大值索引 idxmax() 之前找到索引?

python - 无法在 mac 上安装 ipython