You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python re.findall匹配Johnson、Jackson,排除Jason?

解决Python正则匹配Jackson/Johnson排除Jason的问题

你的正则表达式"J*\w{2}*son"存在几个问题:

  • J*会匹配0个或多个J,完全不符合我们只匹配单个J开头字符串的需求
  • \w{2}*是无效语法,{2}已经指定固定2个字符,后面加*没有任何意义
  • 这个正则会错误匹配Jason,因为Jason的J后as是两个字符,加上son正好符合\w{2}son的结构

要精准匹配Jackson和Johnson,同时排除Jason,可以用以下两种方案:

方案1:直接指定匹配目标分支

最简单的方式是直接写出两个目标字符串的分支:

import re
a = "Jackson, Johnson, Jason"
matches = re.findall(r"Jackson|Johnson", a)
print(matches)  # 输出: ['Jackson', 'Johnson']

方案2:用非捕获组简化正则

如果目标字符串有重复部分,可以用非捕获组提取公共部分,让正则更简洁:

import re
a = "Jackson, Johnson, Jason"
matches = re.findall(r"J(?:ack|ohn)son", a)
print(matches)  # 输出: ['Jackson', 'Johnson']

这里(?:ack|ohn)是非捕获组,作用是匹配ack或者ohn,但不会把这部分单独作为捕获结果返回,所以findall会直接返回完整的匹配字符串。

这两种方案都能精准匹配Jackson和Johnson,同时完全排除Jason——因为Jason的结构是J+aso+son,不符合我们指定的分支规则。

内容的提问来源于stack exchange,提问作者JD13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 21:25:23