正则表达式正向后退

提问

我的目标是将前0与后0的所有内容匹配为十进制值.如果第一个小数位是零,那么我也要匹配小数.如果没有小数,则什么也不捕获.

以下是我想要的一些示例:

180.570123 // should capture the "0123" on the end
180.570    // should capture the "0" on the end
180.0123   // should capture the ".0123" on the end
180.0      // should capture the ".0" on the end
180123     // should capture nothing
180        // should capture nothing

如果第一个小数位为0,则匹配容易:

(\.0.*)

我的问题是匹配,当第一个小数位不为0时.我相信正向后看将解决此问题,但是我无法使其正常工作.这是我尝试过的一个正则表达式:

(?<=^.*\..*)0.*

该正则表达式最终将在Java中使用.

更新:

我将使用Java的replaceAll方法使用此正则表达式消除数字以及字符串末尾的小数点.我将用一个空字符串替换捕获组来完成此操作.这是我想要的一个更好的例子.

String case1 = "180.570123";
String case2 = "180.570";
String case3 = "180.0123";
String case4 = "180.0";
String case5 = "180123";
String case6 = "180";

String result = null;

result = case1.replaceAll( "THE REGEX I NEED", "" );
System.out.println( result ); // should print 180.57

result = case2.replaceAll( "THE REGEX I NEED", "" );
System.out.println( result ); // should print 180.57

result = case3.replaceAll( "THE REGEX I NEED", "" );
System.out.println( result ); // should print 180

result = case4.replaceAll( "THE REGEX I NEED", "" );
System.out.println( result ); // should print 180

result = case5.replaceAll( "THE REGEX I NEED", "" );
System.out.println( result ); // should print 180123

result = case6.replaceAll( "THE REGEX I NEED", "" );
System.out.println( result ); // should print 180

另外,我正在http://gskinner.com/RegExr/测试这些正则表达式

最佳答案

您可以使用以下表达式:

\.[1-9]*(0\d*)

而您想要的将在第一个捕获组中. (小数点除外.)

如果您也想捕获小数点,可以使用:

(?:\.[1-9]+|(?=\.))(\.?0\d*)

范例(online):

Pattern p = Pattern.compile("(?:\\.[1-9]+|(?=\\.))(\\.?0\\d*)");

String[] strs = {"180.570123", "180.570", "180.0123", "180.0", "180123", "180", "180.2030405"};

for (String s : strs) {
    Matcher m = p.matcher(s);
    System.out.printf("%-12s: Match: %s%n", s,
        m.find() ? m.group(1) : "n/a");
}

输出:

180.570123  : Match: 0123
180.570     : Match: 0
180.0123    : Match: .0123
180.0       : Match: .0
180123      : Match: n/a
180         : Match: n/a
180.2030405 : Match: 030405
评论