如何使用Python正则表达式匹配字母字符而不包括数字字符?
使用Python的re模块,怎么才能得到和"\w"一样的效果("\w"可以匹配字母和数字),但又不匹配数字字符(那些可以用"[0-9]"匹配的)呢?
需要注意的是,基本的需求是匹配任何字符(包括所有的unicode变体),但不包括数字字符("[0-9]"可以匹配的)。
最后补充一下,我真的需要一个正则表达式,因为它是更大正则表达式的一部分。
下划线也不应该被匹配。
编辑:
- 我之前没考虑到下划线的情况,所以感谢你们提醒我"\w"会匹配下划线,以及提供的解决方案解决了这个问题。
2 个回答
9
(?!\d)\w
这个位置后面不能跟数字,然后再跟一个 \w
。这样做的效果是排除了数字,但通过使用负向前瞻,允许 \w
的范围。
同样的意思也可以用正向前瞻和 \D
来表达:
(?=\D)\w
如果想匹配多个这样的情况,可以把它们放在括号里:
(?:(?!\d)\w)+
38
你想要的是 [^\W\d]
:这个表示的是一组字符,这组字符既不是数字,也不是字母数字(也就是字母和数字的组合)。如果你也不想要下划线,可以把下划线加到这个排除的集合里。
这有点复杂,如果你问我,但它确实有效。应该比另一种方法更快。