【问题标题】:How do I get this regular expression to ignore accented characters?如何让这个正则表达式忽略重音字符?
【发布时间】:2017-06-12 13:17:54
【问题描述】:

我的脚本正在读取一个文本文件并从中获取最常用的单词。但是,在此过程中的某一时刻,在清理源文本期间,它无法处理重音字符(在这种情况下,它们是 áéíóöőúüű)。

这是我目前拥有的。

str = re.sub(r'\W+', ' ', str)

这只是删除重音字符。我尝试添加flags=re.U,但它只是以不同的方式弄乱了结果。我怀疑有一种简单的方法可以解决我的问题,我一直在寻找它,但没有成功,所以我求助于你。提前致谢。

【问题讨论】:

  • 你用的是什么python版本?
  • @DSLima90 2.7.10
  • 不是清洁解决方案,但我的任务是类似的工作。您可以使用 unidecode.unidecode(text) 将这些字符转换为它们的逻辑标准 ascii。 pypi.python.org/pypi/Unidecode这可能比剥离它们更好。
  • @samuset:请注意:str 不是 Python 中变量的好名称。使用s。

标签: python regex


【解决方案1】:

你需要使用正确的修饰符:

str = re.sub(ur'\W+', u' ', s, flags=re.UNICODE)
                                     ^^^^^^^^^^

见Python 2.x docs:

使\w、\W、\b、\B、\d、\D、\s 和 \S 序列依赖于 Unicode 字符属性数据库。还为 IGNORECASE 启用非 ASCII 匹配。

这是一个在线Python 2.7 demo:

import re
s = u"characters (in this case, they are áéíóöőúüű)."
res = re.sub(ur'\W+', u' ', s, flags=re.UNICODE).encode("utf8")
print(res) # => characters in this case they are áéíóöőúüű 

【讨论】:

  • 感谢您的回复。我已经尝试过了,这确实解决了重音问题,但它似乎并没有删除其他非字母字符,例如标点符号。
  • @samuset 如果您只想要字母字符,请使用str.isalpha()
  • @samuset:看看this demo。考虑到所有 Unicode 字母,它会删除所有非单词字符。并删除标点符号。
  • @Chris_Rands 检查 str 是否为 alpha,但我可以用它来“清理”字符串吗?
  • \W 大于isalpha,因为\W 匹配任何不是Unicode 字母、数字或_ 的字符。
猜你喜欢
  • 1970-01-01
  • 2012-05-15
  • 2013-08-13
  • 2012-10-22
  • 1970-01-01
  • 2014-03-04
  • 1970-01-01
  • 2012-07-24
  • 2016-03-30
相关资源
最近更新 更多