Java正则处理字符串数组:提取嵌套DmetaD与DConD对象
提取DmetaD和DConD对象字符串的解决方案
思路分析
要从给定的嵌套对象数组字符串里,精准捕获所有以DmetaD和DConD开头的完整对象片段,用正则表达式是最直接高效的办法——我们可以通过规则定位目标对象的起始和结束位置,轻松提取出需要的字符串。
正则表达式设计
针对你的字符串结构,这个正则表达式可以完美匹配目标内容:
(DmetaD\([^)]+\))|(DConD\([^)]+\))
DmetaD\(/DConD\(:精准匹配目标对象的开头标识[^)]+:匹配括号内的所有内容(排除闭合括号),确保只捕获对象内部的键值对,不会误匹配到外层括号)\):匹配对象的闭合括号,完成整个对象的捕获
代码示例(以Java为例)
假设你用Java处理这个字符串,具体实现代码如下:
import java.util.regex.Matcher; import java.util.regex.Pattern; public class ExtractTargetObjects { public static void main(String[] args) { String inputStr = "[ Dobj(id=null, dmetaD=DmetaD(id=2068, embedded=true, size=123, comment=raghu, name=string, type=pdf)),dcont=DConD(data=abc)), Dobj(id=null, dmetaD=DmetaD(id=2069, embedded=true, size=123, comment=raghu, name=string, type=pdf)),dcont=DConD(data=abc)) ]"; // 编译正则表达式 Pattern pattern = Pattern.compile("(DmetaD\\([^)]+\\))|(DConD\\([^)]+\\))"); Matcher matcher = pattern.matcher(inputStr); // 遍历并输出所有匹配结果 int count = 1; while (matcher.find()) { String targetObj = matcher.group(); System.out.printf("第%d个提取结果:%s%n", count++, targetObj); } } }
运行结果
执行上述代码后,会输出你需要的独立对象字符串:
第1个提取结果:DmetaD(id=2068, embedded=true, size=123, comment=raghu, name=string, type=pdf) 第2个提取结果:DConD(data=abc) 第3个提取结果:DmetaD(id=2069, embedded=true, size=123, comment=raghu, name=string, type=pdf) 第4个提取结果:DConD(data=abc)
补充说明
如果后续你的字符串中出现嵌套括号(比如某个键值对的内容包含括号),可以把正则调整为递归匹配模式,但从你当前提供的示例来看,上面的正则已经完全够用。
内容的提问来源于stack exchange,提问作者Prash
相关产品推荐
相关产品推荐

