具有unicode范围的Python regex匹配不在范围内的字符

2024-09-29 21:32:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我用正则表达式从文本中去掉“要点”。这些项目符号通常是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 a bullet中的T字符是匹配的。您可以将上面的regex和示例文本复制到http://www.pythonregex.com/中,亲自查看。在

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

如何让Python的regex引擎更好地处理这个表达式?在


Tags: 字符串文本comhttp示例is符号not
1条回答
网友
1楼 · 发布于 2024-09-29 21:32:35

使生成表达式的字符串采用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)

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

相关问题 更多 >

    热门问题