【问题标题】:shorthand for [:alpha:] in python regexpython 正则表达式中 [:alpha:] 的简写
【发布时间】:2023-03-22 11:17:01
【问题描述】:

如果我正在制作需要它的 unicode 正则表达式,则相当于 [:alpha:]

例如[:word:][\w]

如果我能得到一些帮助会很棒。

【问题讨论】:

  • \w 是字母数字,_
  • @jamylak 没错,但我想知道 [:alpha:] 的简写,因为 \w 是 [:word:]。不知道它是否存在。
  • 你为什么老是说\w 是为了[:word:]
  • @jamylak:根据 RegexBuddy,[[:word:]] 匹配 _
  • 这就是我一直说的原因。 regular-expressions.info/posixbrackets.html

标签: python regex unicode


【解决方案1】:

为了符合 Unicode,您需要使用

regex = re.compile(r"[^\W\d_]", re.UNICODE)

当前的 Python 正则表达式引擎不支持 Unicode 字符属性(如 \p{L})。

说明:

\w 匹配(如果设置了 Unicode 标志)任何字母、数字或下划线。

[^\W] 匹配相同的内容,但是使用否定字符类,我们现在可以减去我们不想包含的字符:

[^\W\d_] 匹配 \w 匹配的任何内容,但没有数字 (\d) 或下划线 (_)。

>>> import re
>>> regex = re.compile(r"[^\W\d_]", re.UNICODE)
>>> regex.findall("aä12_")
['a', 'ä']

【讨论】:

    【解决方案2】:

    范围内的任意字符:

    [A-Za-z]
    

    这是 Python 中最好的简写。

    或者你可以用ignorecase[A-Z]re.compile(r'[A-Z]', re.I)

    或内联:re.compile(r'(?i)[A-Z]')

    对于 unicode:re.compile(r'[A-Z]', re.I|re.U)re.compile(r'(?iu)[A-Z]')

    【讨论】:

    • 考虑到问题,您可能还想添加 re.UNICODE 标志。
    • @BurhanKhalid:那么,除了 ASCII 字母之外,它仍然不会匹配。
    • Unicode 标志在这里完全没用。它只影响速记字符类。
    猜你喜欢
    • 2017-07-19
    • 1970-01-01
    • 2016-06-28
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多