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

正则表达式:将字符串中所有大写字符提取至单个捕获组

提取字符串中所有大写字母的解决方案

嘿,我来帮你搞定这个正则提取的问题~你的需求是把字符串里所有的大写字母(A-Z)都提取出来,不管它们中间夹了什么内容,最终按顺序保留这些大写字母对吧?你之前用[A-Z]+失效,是因为这个表达式只能匹配连续的大写字母块,遇到空格或者其他非大写字符就会停住,没法跳过这些内容去抓后面的大写字母。

最简洁的实现方式:全局匹配单个大写字母

完全不用搞否定前瞻这么复杂的东西,直接用全局匹配单个大写字母[A-Z],然后把所有匹配到的结果拼接起来就行,几乎所有主流的正则引擎(Python、JavaScript、Java这些)都支持这种方式:

举个Python的例子:

import re
input_str = "XLarge XLarge Short XXL Short"
# 提取所有大写字母并拼接成字符串
result = ''.join(re.findall(r'[A-Z]', input_str))
print(result)  # 输出:XLXLSSXXLS

如果你的需求是按原单词分组提取(比如每个单词里的大写字母单独拼成一段,再用空格分隔),比如输入里的每个单词对应提取后是XL、XL、S、XXL、S,最终输出XL XL S XXL S,那可以先拆分单词再逐个处理:

import re
input_str = "XLarge XLarge Short XXL Short"
# 按空格拆分单词,每个单词提取大写字母后拼接,再用空格连接所有片段
grouped_result = ' '.join([''.join(re.findall(r'[A-Z]', word)) for word in input_str.split()])
print(grouped_result)  # 输出:XL XL S XXL S

关于用否定前瞻实现的疑问

其实真的没必要用否定前瞻来做这件事,上面的方法简单直接,还容易维护。不过如果硬要试试用前瞻的写法(比如某些特殊场景要求用单个正则完成),也能写,但表达式会变得很绕,比如这样:

([A-Z])(?:[^A-Z]*([A-Z]))*

但这个写法需要多次捕获,还要把所有捕获组的内容拼接,反而不如全局匹配单个字母来得高效。所以真的不推荐用前瞻来解决这个问题~

总之,优先选择全局匹配单个大写字母再拼接的方案,完全能满足你的需求,还省心!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:12:29