带有Unicode范围的Python Regex与不在范围内的字符匹配



我正在使用正则划分从文本中剥离"子弹点"。这些子弹点通常是在Unicode范围中发现的符号,例如几何形状( u25a- u25ff)或类似的符号。以下是这样的子弹的一个例子:

◉这是子弹 ♦︎这也是子弹 ☉这也是如此这不是子弹。

我正在使用以下正则表达式匹配以下要点:

s*([u00a4u00b7]|[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字符。您可以将上面的正则和示例文本复制到http://www.pythonregex.com/为自己查看。

UNICODE标志编译了正则表达式。

如何使Python的Regex引擎对此表达式很好?

使生成您表达式的字符串以Unicode为单位,以便将序列解释为Unicode字符,而不是普通的u20等。尝试以下内容:

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

,您很可能不会使用Python 3.*,其中所有字符串都是Unicode Afaik。

相关内容

最新更新