我有一个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
答案 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("\\.", ""));