如何拆分字符串以提取被方括号完整包裹的子串?
解决方案
要获取包含方括号的完整子串,有两种简单的修改方式:
方式一:直接使用整个匹配结果(无需修改正则)
正则匹配中,matcher.group(0)会返回整个正则表达式匹配到的完整内容,而group(1)仅返回第一个捕获组(括号内的部分)的内容。只需修改代码中添加元素的行即可:
val matches: MutableList<String> = mutableListOf() val str = "[abc][def]" val matcher = Pattern.compile("\\[([^]]+)]?").matcher(str) while(matcher.find()) { matches.add(matcher.group(0)); // 改用group(0)获取完整匹配串 } println(matches) // 输出: [abc, def]
方式二:优化正则表达式(更严谨)
原正则末尾的]?是可选匹配,可能导致匹配不完整的情况,建议去掉并调整为更精准的正则,同时如果不需要捕获括号内的内容,可以去掉捕获组:
val matches: MutableList<String> = mutableListOf() val str = "[abc][def]" val matcher = Pattern.compile("\\[[^]]+]").matcher(str) // 去掉捕获组和可选的] while(matcher.find()) { matches.add(matcher.group(0)); } println(matches) // 输出: [abc, def]
正则说明
\[[^]]+]的含义:
\[:匹配左方括号[(需转义)[^]]+:匹配一个或多个非右方括号的字符]:匹配右方括号]
这样正则会精准匹配每一个完整的[xxx]格式子串,避免不必要的可选匹配。
内容的提问来源于stack exchange,提问作者gstackoverflow
相关产品推荐
相关产品推荐

