我可以在Python RegEx中混合字符类吗?

Hub*_*bro 5 python regex

Python RegEx中的特殊序列(字符类)是类似于\w\d匹配一组字符的转义.

就我而言,我需要能够匹配除数字之外的所有字母数字字符.

也就是说,\w减去\d.

我需要使用特殊序列,\w因为我正在处理非ASCII字符,需要匹配"Æ"和"Ø"等符号.

有人会认为我可以使用这个表达式:[\w^\d]但它似乎不匹配任何东西,我不知道为什么.

简而言之,我如何在Python正则表达式中混合(加/减)特殊序列?


编辑:我不小心使用[\W^\d]而不是[\w^\d].后者确实匹配某些东西,包括括号和逗号,就我而言,它们不是字母数字字符.

Jan*_*ila 13

你可以使用r"[^\W\d]",即.颠倒非字母数字和数字的结合.

  • 请注意,您需要为此设置`re.UNICODE`以匹配`æ`和其他非ASCII字符.OP可能已经做到了这一点,但它已经说明了. (3认同)

Mar*_*ers 6

你不能减去字符类,不.

最好的办法是使用新regex模块,设置为替换repython中的当前模块.它支持基于Unicode属性的字符类:

\p{IsAlphabetic}
Run Code Online (Sandbox Code Playgroud)

这将匹配Unicode规范声明的任何字符是字母字符.

更妙的是,regex 支持字符类减法; 它将这些类视为集合,并允许您与--运算符创建差异:

[\w--\d]
Run Code Online (Sandbox Code Playgroud)

匹配\w除了匹配的任何东西\d.

  • regex的值为+1,但实际上它支持类减法:`[\ w-\ d] (2认同)