正则表达式匹配所有非字母,不包括变音符号(python)

时间:2016-07-24 21:42:41

标签: python regex python-2.7 unicode regex-negation

我找到了这个优秀的指南:http://www.regular-expressions.info/unicode.html#category,提供了一些关于如何将字母与以下正则表达式匹配的提示:

\P{L}

但是这个正则表达式会考虑非字母à编码为U + 0061 U + 0300(如果我理解的话)。 例如,在python中使用regex模块的代码如下:

all_letter_doc = regex.sub(r'\P{L}', ' ', doc)

会转换purè

中的pur

在指南中提供了如何将所有字母与以下内容匹配:

\p{L}\p{M}*+

在实践中我需要否定这一点,但我不知道如何获得它。

1 个答案:

答案 0 :(得分:5)

由于您使用的是Python 2.x,因此r'\P{L}'是一个字节字符串,而您输入的是Unicode。您需要使模式成为Unicode字符串。请参阅PyPi regex reference

  

如果未指定ASCIILOCALEUNICODE标志,则如果正则表达式模式是Unicode字符串并且UNICODE,则默认为ASCII如果它是一个字节串。

因此,您需要使用ur'\P{L}'u' '替换模式。

如果你想匹配除字母和变音符号以外的1个字符,你需要ur'[^\p{L}\p{M}]+'正则表达式。