【问题标题】:Regex match all non letters excluding diacritics (python)正则表达式匹配所有非字母,不包括变音符号(python)
【发布时间】:2016-11-28 04:01:39
【问题描述】:

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

\P{L}

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

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

purè 转换为pur

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

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

实际上我需要否定它,但我不知道如何获得它。

【问题讨论】:

  • 尝试ur'\P{L}' 并替换为u' '。如果你想用空格替换除字母和变音符号以外的所有字符,你需要[^\p{L}\p{M}]+ regex
  • 很好,只需在答案中解释它为什么有效,我会接受。谢谢!
  • 你使用的是 Python 2.x 吗?

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


【解决方案1】:

由于您使用的是 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}]+' regex。

【讨论】:

    猜你喜欢
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多