如何使用Python正则表达式匹配不含数字的字母字符?

10
使用Python模块re,如何获取与“\w”等效的内容(匹配字母数字字符),但不匹配数字字符(可以通过“[0-9]”匹配的字符)?
请注意,基本需求是匹配任何字符(包括所有Unicode变体),而不包括数字字符(这些字符可以通过“[0-9]”匹配)。
最后需要说明的是,我确实需要一个正则表达式,因为它是更大正则表达式的一部分。
下划线不应被匹配。
编辑:
- 我没有考虑到下划线状态,所以感谢关于使用“\w”匹配下划线的警告,并感谢选定的解决方案解决了这个问题。
2个回答

38
你需要的是[^\W\d]:这组字符既不是数字也不是非字母数字字符。如果你也不想要它们,可以在否定集中添加一个下划线。
有点绕,但有效。应该比前瞻替代方案更快。

3
好的,我点赞了。我没想到那个。 - Tomalak
很棒的想法,可以与其他模式和正则表达式实现一起重复使用。 - vaab

9
(?!\d)\w

一个位置后面不跟数字,然后是\w。通过使用负向前瞻有效地取消数字,但允许\w范围。

同样可以用正向前瞻和\D表示:

(?=\D)\w

要匹配多个条件,将它们括在括号中:

(?:(?!\d)\w)+

7
别忘了 \w 还包括下划线。 - Tim Pietzcker
OP 没有提到下划线,那与此有什么关系? - Tomalak
2
以防万一,如果楼主没有预料到的话。我喜欢你的解决方案。 - Tim Pietzcker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接