Вы можете использовать 2 группы захвата, сначала соответствующие символы слова, за которыми следует двоеточие в первой и цифра во второй группе.
Подберите 1 или более горизонтальных пробельных символов между ними и замените их на один пробел.
Шаблон
(\w+:)\h+((?:\(\d+(?:,\d+)*(?:\.\d+)?\)|\d+(?:,\d+)*(?:\.\d+)?))
Объяснение
(\w+:)
Захват группа 1 , соответствует 1+ словам символов и :
\h+
Соответствует 1+ горизонтальным пробелам (
Захват группа 2 (?:
Группа без захвата \(\d+(?:,\d+)*(?:\.\d+)?\)
Совпадение числовой части с (
и )
|
Или \d+(?:,\d+)*(?:\.\d+)?)
Соответствие номер части без круглых скобок
)
Закрыть группу групп без захвата
Regex demo | Java демо
Заменить на
$1 $2
Пример кода
String regex = "(\\w+:)\\h+((?:\\(\\d+(?:,\\d+)*(?:\\.\\d+)?\\)|\\d+(?:,\\d+)*(?:\\.\\d+)?))";
String string = "Tst: (2344.45)\n"
+ "Tst: 53.00\n"
+ "Tst: 2777,46.00";
String subst = "$1 $2";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);
System.out.printlnmatcher.replaceAll(subst);
Выходные данные
Tst: (2344.45)
Tst: 53.00
Tst: 2777,46.00
Если вы хотите сопоставить несколько :
, вы можете использовать квантификатор (обратите внимание, что двойные экранированные обратные слэши в Java)
(\w+:+)\h+((?:\(\d+(?:,\d+)*(?:\.\d+)?\)|\d+(?:,\d+)*(?:\.\d+)?))
Regex demo