如何用正则表达式提取[]包裹内容?解决仅匹配第一个的问题
解决正则仅匹配第一个元素的问题
嘿,我懂你的困扰!你用\[\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
相关产品推荐
相关产品推荐

