具有 unicode 范围的 Python 正则表达式匹配不在范围内的字符

标签 python regex unicode python-unicode

我正在使用正则表达式从文本中删除“项目符号点”。这些要点通常是在 unicode 范围内找到的符号,例如几何形状 (\u25a0-\u25ff) 或类似符号。以下是此类项目符号的示例:

 ◉ This is a bullet
 ♦︎ This is also a bullet
 ☉ And so is this

This is not a bullet.

我使用以下正则表达式来匹配这些要点:

\s*([\u00a4\u00b7]|[\u2010-\u2017]|[\u2020-\u206f]|[\u2300-\u23f3]|[\u25a0-\u25ff]|[\u2600-\u26ff] |[\u2700-\u27bf]|[\u2b00-\u2bff])\s*

这在 Ruby 中有效(请参阅 http://rubular.com/r/O7ZObURmlt 中的示例),但在 Python 中它匹配任何字符串的第一个字符。例如,匹配字符串 This is not aBullet 中的 T 字符。您可以将上述正则表达式和示例文本复制到 http://www.pythonregex.com/亲自看看这个。

正则表达式是使用 UNICODE 标志编译的。

如何让 Python 的正则表达式引擎能够很好地处理这个表达式?

最佳答案

使生成表达式的字符串采用 unicode 格式,以便将序列解释为 unicode 字符,而不是普通的 u20,等等。请尝试以下操作:

regex = re.compile(u"\s*([\u00a4\u00b7]|[\u2010-\u2017]|" + \
    "[\u2020-\u206f]|[\u2300-\u23f3]|[\u25a0-\u25ff]|" + \
    "[\u2600-\u26ff]|[\u2700-\u27bf]|[\u2b00-\u2bff])\s*", re.UNICODE)

而且您很可能没有使用 Python 3.*,其中所有字符串都是 unicode AFAIK。

关于具有 unicode 范围的 Python 正则表达式匹配不在范围内的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21516335/

相关文章:

Java Regex 不匹配,有什么解释吗?

python - 如何将输出数据排序为列和行

javascript - 正则表达式匹配以数字结尾的字符串的前缀和后缀

python - 如何将多列乘以另一列 Pandas

regex - 为什么带有 perl 正则表达式的 git-log 负向后查找会导致 fatal error ?

python - 如何使用 Python 保存数据库响应中字符串的完整性

android - 我的表情符号软键盘不支持 android 中的消息 EditText 字段

angularjs - 在输入文本框的占位符中渲染特殊字符

python - Apache Superset 上的多个数据库访问?

用模拟函数替换真实返回值和函数实现的 Pythonic 方法