【问题标题】:What Python regex matches all alphabet characters but no numbers? [unicode aware] [duplicate]什么 Python 正则表达式匹配所有字母字符但不匹配数字? [unicode 感知] [重复]
【发布时间】:2012-04-16 18:59:24
【问题描述】:

我正在寻找 [\w]&&[^\d] 的等价物(当然 && 不是正则表达式运算符)。 正则表达式只需要匹配由 UTF8“字母”字符组成的单词。有人有什么想法吗?

【问题讨论】:

  • 永远不要对编码文本执行正则表达式。
  • 你说的是英文字母吗?那么下面的答案 [a-zA-Z] 就足够了。否则你会得到款待......
  • “永远不要对编码文本执行正则表达式。”这用于国际化 URL 匹配。不是长文本。
  • @IgnacioVazquez-Abrams “永远不要对编码文本执行正则表达式。”那怎么会有 re.UNICODE 标志呢?我想当你不使用那个标志时,事情会破坏你。

标签: python regex


【解决方案1】:

regex 支持 Unicode 属性,这意味着您可以将\p{L} 与它一起使用。

【讨论】:

    【解决方案2】:

    正如 Ignacio 指出的那样,[a-zA-Z] 不会匹配 Unicode 字符,并且没有为所有 Unicode 字符预定义的字符类,您可能希望使用类似于以下的内容,这将简单明了

    re.findall("(["+string.letters+"])+",st)
    

    请注意,string.letters 取决于区域设置,除非您想切换本地,否则您可以使用 locale.setlocale(locale.LC_CTYPE, code) 进行偏离路线,这应该轻而易举。

    【讨论】:

      【解决方案3】:

      AFAICT,没有匹配所有字母但不匹配数字或下划线的正则表达式。

      您可以使用\w,然后使用代码点属性检查匹配项是否为字母:

      def isletter(c):
          return unicodedata.category(c).startswith('L')
      

      【讨论】:

        【解决方案4】:

        不确定正则表达式,但对于 unicode,您也许可以使用 uncodedata 模块;特别是unicodedata.category() 函数

        【讨论】:

          【解决方案5】:

          使用 [a-zA-Z] 匹配所有字母字符。

          【讨论】:

          • 不正确。这将错过“あ”。
          • 那不是字母字符。
          • 是的。这不是英文字母字符。
          • "éléphant" : 'é' 不匹配。
          猜你喜欢
          • 2013-06-03
          • 1970-01-01
          • 1970-01-01
          • 2013-04-17
          • 2011-01-09
          • 1970-01-01
          • 2011-08-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多