用于删除十进制字符串中的零的正则表达式

时间:2014-10-23 21:43:30

标签: java regex regex-lookarounds

我需要从十进制字符串中删除零 例如:007.004(100.007)应转换为7.4(100.7)

我尝试使用基于模式的匹配器" 0 +(\ d)":

Pattern p = Pattern.compile(regex);
Matcher m = null;
try {

    m = p.matcher(version);
    while (m.find()) {
        System.out.println("Group : " + m.group());
        System.out.println("Group 1 : " + m.group(1));
        version = version.replaceFirst(m.group(), m.group(1));
        System.out.println("Version: " + version);
    }

但这导致7.4(10.7)。有什么想法吗?

3 个答案:

答案 0 :(得分:0)

您需要使用此模式进行替换:

(\\([^)]+\\))|0+

和这个替换字符串

\\1 

换句话说,您需要首先捕获括号之间的所有内容,然后查找零。使用replaceAll方法。

答案 1 :(得分:0)

如果您尝试在非零数字之前删除前导零,则可以使用此模式匹配此类运行:"(?<!\\d)0+(?=[1-9])"。甚至使用零长度前瞻,因为你的标签暗示你可能想做。使用它比你的更简单,因为它不匹配你想要保留的任何东西:

Pattern p = Pattern.compile("(?<!\\d)0+(?=[1-9])");
Matcher m = p.matcher(version);;

version = matcher.replaceAll("");

如果您只打算这样做一次,那么您可以简化为单行:

version = version.replaceAll("(?<!\\d)0+(?=[1-9])", "");

答案 2 :(得分:0)

在匹配另一个字符串时,无需在另一个字符串中执行替换:

while (m.find()) {
version = version.replaceFirst(m.group(), m.group(1));

您可以改为使用此替代品:

version = version.replaceAll("(^|\\.)0+", "$1");