Regex Java регулярное выражение для извлечения строки, кроме последнего числа - PullRequest
0 голосов
/ 01 июня 2018

Как извлечь все символы из строки без последнего числа (если существует) в Java, я нашел, как извлечь последнее число в строке, используя это регулярное выражение [0-9.]+$, однако я хочу обратного.

Примеры:

abd_12df1231 => abd_12df

abcd => abcd

abcd12a => abcd12a

abcd12a1 => abcd12a

Ответы [ 3 ]

0 голосов
/ 01 июня 2018

С помощью этого регулярного выражения вы можете захватить последнюю цифру (ы)

\d+$

Вы можете сохранить эту цифру и сделать string.replace(lastDigit,"");

0 голосов
/ 01 июня 2018

То, что вы можете сделать, это совпадение с начала строки ^ один или несколько символов слова \w+, за которыми не следует цифра, используя \D

^\w+\D

Как предлагается в комментариях, вы можете расширить символы, которые вы хотите сопоставить, используя класс символов ^[\w-]+\D или, если вы хотите сопоставить любой символ, вы можете использовать точку ^.+\D

0 голосов
/ 01 июня 2018

Если вы хотите удалить одну или несколько цифр в конце строки, вы можете использовать

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)); 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...