如何通过正则表达式提取字符串最后一个单词的前3个字符?
正则匹配解决方案
需求背景
给定两个示例字符串:
- ABC DEF GHI JKL MNOPQR STUVWX
- ABC DEF GHI JKL MNOPQR STU VWX
要求从第一个字符串提取STU,从第二个字符串提取VWX。
核心匹配逻辑
我们可以基于你已掌握的末尾单词匹配规则,补充长度判断分支实现需求:
- 若字符串末尾的最后一个单词长度为6,取该单词的前3位
- 若字符串末尾的最后一个单词长度为3,直接取该单词
可用正则表达式
通用兼容写法(支持所有主流正则引擎)
(?:([A-Za-z]{3})[A-Za-z]{3}$)|(?:^.* ([A-Za-z]{3})$)
规则说明
- 第一分支
(?:([A-Za-z]{3})[A-Za-z]{3}$):匹配末尾为6位字母的场景,捕获前3位对应第一个示例的STU - 第二分支
(?:^.* ([A-Za-z]{3})$):匹配末尾为独立3位字母单词的场景,直接捕获对应第二个示例的VWX - 非捕获组
(?:)仅做逻辑匹配,最终唯一的有效捕获结果就是目标内容
精简写法(支持PCRE、Python regex库等支持分支重置的引擎)
(?|([A-Za-z]{3})[A-Za-z]{3}$|.* ([A-Za-z]{3})$)
该写法通过分支重置组统一捕获组序号,调用时直接取第1个捕获组即可得到结果。
测试结果
- 测试字符串
ABC DEF GHI JKL MNOPQR STUVWX,捕获结果为STU - 测试字符串
ABC DEF GHI JKL MNOPQR STU VWX,捕获结果为VWX
内容的提问来源于stack exchange,提问作者Andrew Johns
相关产品推荐
相关产品推荐

