Можно использовать следующее регулярное выражение:
^((\d+\.)*\d+) \D*$
Где группа захвата 1 будет содержать ваш матч.
Объяснение:
^ # Start of the String
( # Open capture group 1:
(\d+\.) # One or more digits, followed by a dot
* # Repeated 0 or more times
\d+ # Followed by 1 or more digits
) # Closing capture group 1
# Followed by a space
\D* # Followed by 0 or more non-digits
$ # Followed by the end of the String
^
и $
заставят нас взглянуть на всю строку.\D*
убедится, что в подстроке нет пробелов после пробела.И \d+
после (\d+\.)*
гарантирует, что всегда есть начальная цифра, с одной или несколькими #.
перед ней (где #
- неотрицательное число).
Чтобы извлечь этозначение, вы можете использовать это регулярное выражение с String.matches
и .replaceFirst
следующим образом:
// TODO: Give proper method name
String test(String str){
String regex = "^((\\d+\\.)*\\d+) \\D*$";
if(str.matches(regex))
return str.replaceFirst(regex, "$1");
// The `$1` will leave just the match of the first capture group,
// removing everything else we don't need
else
return null;
}
Попробуйте онлайн.
Если одно число без пробелов позади него (например, "123"
) также должно совпадать, можно сделать небольшие изменения в регулярном выражении, изменив \\D*$
на ( \\D*)?$
, чтобы пробел стал необязательным.
Попробуйте онлайн.