我有一个简单的xml文件,我想删除第一个<item>
标记之前的所有内容。
<sometag>
<something>
.....
</something>
<item>item1
</item>
....
</sometag>
以下java代码无效:
String cleanxml = rawxml.replace("^[\\s\\S]+<item>", "");
这样做的正确方法是什么?我该如何解决非贪婪问题?对不起,我是C#程序员。
答案 0 :(得分:4)
好吧,如果你想使用正则表达式,那么你可以使用replaceAll
。该解决方案使用不情愿的量词和反向引用:
String cleanxml = rawxml.replaceAll(".*?(<item>.*)", "$1");
或者,您可以使用replaceFirst
。该解决方案使用积极的前瞻。
String cleanxml = rawxml.replaceFirst(".*?(?=<item>)", "");
但是,仅使用indexOf
和substring
更有意义。
String cleanxml = rawxml.substring(rawxml.indexOf("<item>"));
replace
不起作用的原因是char
和CharSequence
重载都不是基于正则表达式的。这是简单的字符(序列)替换。
另外,正如其他人警告你的那样,除非你正在处理简单的XML,否则你不应该使用正则表达式。您应该使用实际的XML解析器。
答案 1 :(得分:3)
......正确的做法是什么 这个? ...
由于您询问了正确的方法,正确的方法是解析XML并删除节点并重新序列化为String。您永远不应该使用正则表达式来操作XML或任何其他具有可用解析器的结构化文档(JSON,YAML等)。
对于小型XML,我建议JDOM。
答案 2 :(得分:1)
使用
replaceAll
或
replaceFirst
只需替换将查找字符串匹配 HTH