Моя цель - сопоставить первые 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.
UPDATE
Я собираюсь использовать это регулярное выражение, чтобы избавиться от чисел и, возможно, десятичной точки в конце строки, используя 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/