【问题标题】:Python regex to match non-ascii namesPython 正则表达式匹配非 ascii 名称
【发布时间】:2013-02-17 20:06:58
【问题描述】:

我正在尝试使用 re 模块验证名称字段。

\w 不匹配非 ascii 字符,例如 à

似乎在许多其他正则表达式引擎中,解决方案应该是\p{L},但它似乎在 python 中不受支持。什么是合适的等价物?

更新:

这与围绕该主题的其他问题不同,因为我正在寻找 \w 的 unicode 替代品,这不是使用默认 re.UNICODE 标志获得的那个(因为这个标志也使 \w匹配数字和下划线)。

【问题讨论】:

  • 您是否使用LOCALE 和/或UNICODE 标志?
  • 是的,每个re.<function> 都有一个flags 参数。
  • 请参阅stackoverflow.com/questions/238223/… 了解类似(重复?)问题。
  • @BrenBarn 我试过 re.UNICODE 但它不适合,因为它也匹配数字和下划线
  • @GJ.:您的更新:指示的重复状态“我还需要一个 不匹配数字的正则表达式。”那么下划线处理是唯一的区别吗?

标签: python regex validation unicode non-ascii-characters


【解决方案1】:

[^\W0-9_]re.UNICODE 一起使用时适用于我

【讨论】:

  • @quetzalcoatl 感谢您的参考,这是隐藏在其中的部分形式。
【解决方案2】:

[^\d\s_] 是否符合您的要求?

【讨论】:

    【解决方案3】:

    将 Unicode 字符串传递给 re 模块并启用 re.UNICODE 标志,例如:

    # -*- coding: utf-8 -*-
    import re
    
    print(re.findall(ur"\w+", ur"\w does match à.", flags=re.UNICODE))
    

    【讨论】:

      【解决方案4】:

      我认为您需要使用 UNICODE 修饰符为字符类启用 unicode 支持。

      regexRef = re.compile("\w", re.UNICODE)
      

      看看这是否有助于匹配那些非 ASCII 字符。

      【讨论】:

      • re.UNICODE 不能解决这个问题,因为它也匹配数字和下划线。
      猜你喜欢
      • 2011-01-08
      • 2016-01-22
      • 1970-01-01
      • 1970-01-01
      • 2013-09-22
      • 2015-06-27
      • 1970-01-01
      • 2014-01-17
      • 1970-01-01
      相关资源
      最近更新 更多