在所有地方替换已定义的两个标签之间的点

时间:2011-11-20 08:34:15

标签: java regex

我有一个XML文件,其中包含为不同项目定义的价格,如下所示。

<property>
    <propertyid>AAA</propertyid>
    <price>8.725</price>
    <discount>0</discount>
</property>
<property>
    <propertyid>BBB</propertyid>
    <price>4.135</price>
    <discount>0</discount>
</property>

但我想删除所有价格中的点(。)..

例如:新的XML字符串应如下所示..

<property>
    <propertyid>AAA</propertyid>
    <price>8725</price>
    <discount>0</discount>
</property>
<property>
    <propertyid>BBB</propertyid>
    <price>4135</price>
    <discount>0</discount>
</property>

如何在java中使用正则表达式一次性替换所有这些。

这可能是一个简单的问题,但我是正则表达式的新手,我需要一个快速的解决方案。

提前谢谢大家。

BR,

Chamin

3 个答案:

答案 0 :(得分:3)

str = str.replaceAll("<price>(\\d+)\\.(\\d+)</price>", "<price>$1$2</price>");

答案 1 :(得分:1)

如果您确定该文件在任何其他地方不包含.,您只需使用此

String content = "...";
String replaced = content.replaceAll("[.]",""); // or simply content.replace(".",""); 

如果您确定<price>仅显示在<property标记内,则可以使用此

        String content = "<price>87.25</price>";
        String replaced = content.replaceAll(
                 "<price>(\\d+)\\.(\\d+)</price>","<price>$1$2</price>");
        System.out.println(replaced);

但是,万无一失的方法是使用xpath解析和Xpath只选择所需的节点,然后使用上面的RE替换

答案 2 :(得分:0)

除了Boaho的版本,请找到2个我的。第一个完全没有使用正则表达式,因为(在你的例子列表中)你真的不需要它们。第二个使用正则表达式,但对于出现在价格标签之外的点不安全。再次,这适用于您的示例。

    String str = "<property>\r\n" + 
            "    <propertyid>AAA</propertyid>\r\n" + 
            "    <price>8.725</price>\r\n" + 
            "    <discount>0</discount>\r\n" + 
            "</property>\r\n" + 
            "<property>\r\n" + 
            "    <propertyid>BBB</propertyid>\r\n" + 
            "    <price>4.135</price>\r\n" + 
            "    <discount>0</discount>\r\n" + 
            "</property>";


    System.out.println(str.replace(".", ""));

    System.out.println(str.replaceAll("\\.", ""));