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

如何用正则表达式提取[]包裹内容?解决仅匹配第一个的问题

解决正则仅匹配第一个元素的问题

嘿,我懂你的困扰!你用\[\d+\]只能抓到第一个[15],是因为默认情况下正则表达式只会返回第一个匹配的结果,想要拿到所有符合格式的元素,只需要加上全局匹配的规则或者用对应语言里的全局匹配方法就行~

常见编程语言的实现示例

JavaScript

在JS里,给正则加上g(global)标志就能开启全局匹配,match()方法就会返回所有匹配的数组:

const targetStr = '[15][18][22]';
const matchedArray = targetStr.match(/\[\d+\]/g);
console.log(matchedArray); // 输出: ["[15]", "[18]", "[22]"]

Python

Python的re模块里,findall()方法本身就会返回所有匹配结果的列表,不需要额外加标志:

import re

target_str = '[15][18][22]'
matched_list = re.findall(r'\[\d+\]', target_str)
print(matched_list) # 输出: ['[15]', '[18]', '[22]']

Java

Java需要通过Matcher的find()方法循环遍历所有匹配项,收集到列表里:

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MatchAllExample {
    public static void main(String[] args) {
        String targetStr = "[15][18][22]";
        Pattern pattern = Pattern.compile("\\[\\d+\\]");
        Matcher matcher = pattern.matcher(targetStr);
        
        List<String> matchedList = new ArrayList<>();
        while (matcher.find()) {
            matchedList.add(matcher.group());
        }
        
        System.out.println(matchedList); // 输出: [ [15], [18], [22] ]
    }
}

核心要点

  • 本质问题:默认正则匹配是“非全局”的,找到第一个匹配就停止
  • 解决思路:要么给正则添加全局匹配标志(如JS的g),要么使用语言中专门获取所有匹配结果的API(如Python的findall)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:13:11