Java正则表达式删除字符串中间

时间:2015-07-01 09:46:55

标签: java regex

我在网站上查看了几个正则表达式问题但没有工作,如果有人感觉到这种情况,那就很抱歉。 我在XML文件中有这个字符串:

<MessageRef>Trading01</MessageRef>

每次生成xml时,Trading01将是一个不同的String(需要手动输入)。目标是在此处自动生成任何唯一值以用于测试目的。如何删除<MessageRef></MessageRef>之间的任何内容?

我试过这个,但它不起作用:

 message.replaceAll("(<MessageRef>)[^&]*(</MessageRef>)", String.valueOf(System.currentTimeMillis()));

这是一个我知道的简单问题,但整个上午都让我烦恼!任何帮助将不胜感激!

4 个答案:

答案 0 :(得分:2)

我尝试了这个,它修改了XML标记内的任何内容:

message.replaceAll("(<MessageRef>)[^&]*(</MessageRef>)", "<MessageRef>" + String.valueOf(System.currentTimeMillis()) + "</MessageRef>");

输出:

<MessageRef>1435744441381</MessageRef>

答案 1 :(得分:2)

Regex is not best tool to parse XML。请改用解析器。我喜欢使用Jsoup来简化它(它的主要目的是成为HTML解析器,因此它支持CSS查询)。

这是代码示例

String text = "<MessageRef>Trading01</MessageRef>";

Document doc = Jsoup.parse(text, "", Parser.xmlParser());
System.out.println(doc);
System.out.println("---------");

Elements elements = doc.select("MessageRef");// cssQuery
for (Element el : elements) {//for each tag named MessageRef
    //set its text value to:
    el.text("date = " + new Date());
}

String replaced = doc.toString();
System.out.println(replaced);

输出:

<messageref>
 Trading01
</messageref>
---------
<messageref>
 now = Wed Jul 01 12:03:52 CEST 2015
</messageref>

如果您想阻止文本美化以符合XML标准,例如添加新行,请使用

doc.outputSettings().prettyPrint(false);

你会得到

<messageref>Trading01</messageref>
---------
<messageref>date = Wed Jul 01 12:07:42 CEST 2015</messageref>

答案 2 :(得分:1)

你也可以这样做:

正则表达式:<MessageRef>(.*?)</MessageRef>

示例:

System.out.println(message.replaceAll("<MessageRef>(.*?)</MessageRef>", "<MessageRef>" + String.valueOf(System.currentTimeMillis() + "</MessageRef>")));

答案 3 :(得分:0)

以下也可以

    public static void main(String[] args) {
                    String input="<MessageRef>Trading01</MessageRef>";
                    System.out.println(input.substring(0,input.indexOf(">", 0)+1)+System.currentTimeMillis()+input.substring(input.indexOf("<",1),input.length()));

                }