如何使用Python正则表达式匹配字母字符而不包括数字字符?

10 投票
2 回答
6543 浏览
提问于 2025-04-15 15:39

使用Python的re模块,怎么才能得到和"\w"一样的效果("\w"可以匹配字母和数字),但又不匹配数字字符(那些可以用"[0-9]"匹配的)呢?

需要注意的是,基本的需求是匹配任何字符(包括所有的unicode变体),但不包括数字字符("[0-9]"可以匹配的)。

最后补充一下,我真的需要一个正则表达式,因为它是更大正则表达式的一部分。

下划线也不应该被匹配。

编辑:

  • 我之前没考虑到下划线的情况,所以感谢你们提醒我"\w"会匹配下划线,以及提供的解决方案解决了这个问题。

2 个回答

9
(?!\d)\w

这个位置后面不能跟数字,然后再跟一个 \w。这样做的效果是排除了数字,但通过使用负向前瞻,允许 \w 的范围。

同样的意思也可以用正向前瞻和 \D 来表达:

(?=\D)\w

如果想匹配多个这样的情况,可以把它们放在括号里:

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

你想要的是 [^\W\d]:这个表示的是一组字符,这组字符既不是数字,也不是字母数字(也就是字母和数字的组合)。如果你也不想要下划线,可以把下划线加到这个排除的集合里。

这有点复杂,如果你问我,但它确实有效。应该比另一种方法更快。

撰写回答