Если вы хотите удалить одну или несколько цифр в конце строки, вы можете использовать
s = s.replaceFirst("[0-9]+$", "");
См. Демонстрационную версию regex
Чтобы также удалитьfloat, используйте
s = s.replaceFirst("[0-9]*\\.?[0-9]+$", "");
См. еще одну демонстрацию регулярных выражений
Подробности
(?s)
- a Pattern.DOTALL
встроенный модификатор ^
- начало строки (.*?)
- Группа захвата # 1: любые 0+ символов, кроме символов разрыва строки, как можно меньше \\d*\\.?\\d+
- целое число или значение с плавающей запятой $
- конец строки.
Демонстрация Java :
List<String> strs = Arrays.asList("abd_12df1231", "abcd", "abcd12a", "abcd12a1", "abcd12a1.34567");
for (String str : strs)
System.out.println(str + " => \"" + str.replaceFirst("[0-9]*\\.?[0-9]+$", "") + "\"");
Вывод:
abd_12df1231 => "abd_12df"
abcd => "abcd"
abcd12a => "abcd12a"
abcd12a1 => "abcd12a"
abcd12a1.34567 => "abcd12a"
Чтобы действительно сопоставить подстроку от начала до последнего числа, вы можете использовать
(?s)^(.*?)\d*\.?\d+$
См. Демонстрационную версию regex
Java-код:
String s = "abc234 def1.566";
Pattern pattern = Pattern.compile("(?s)^(.*?)\\d*\\.?\\d+$");
Matcher matcher = pattern.matcher(s);
if (matcher.find()){
System.out.println(matcher.group(1));
}