найти число и добавить и символ операции (java, knime)

Я работаю над knime с узлом замены строки и должен добавить знак математической операции (умножение, '*') за цифровым числом (внутри строковой ячейки). Я нахожу числа с помощью регулярного выражения (на основе Java)

((?:\d+\.)?\d+ )

Я попытался добавить операцию умножения, добавив текст замены

((?:\d+\.)?\d+)\*

Но замена теперь создает что-то вроде:

заменить:

1.456 substance

фактически заменено на:

((?:\d+\.)?\d+)\*substance

Но нужно это:

1.456*substance

Как я могу изменить текст замены, чтобы получить необходимый результат или каков правильный подход?

Спасибо.


person Rockbar    schedule 13.10.2015    source источник
comment
Я предполагаю, что вы хотели использовать обратную ссылку $1 в тексте замены. Что-то вроде $1*substance?   -  person Wiktor Stribiżew    schedule 13.10.2015
comment
@Jongware: фактического кода нет. Это узел замены строки в knime, который служит для кода Java в фоновом режиме. (извините, я действительно новичок). Сравните его с поиском и заменой, например. внутри блокнота.   -  person Rockbar    schedule 13.10.2015
comment
@Rockbar, почему бы и нет (\d*\.\d*)? вы можете проверить образец regexr.com/3bvkf   -  person kucing_terbang    schedule 13.10.2015
comment
@kucing: я получаю недопустимую ссылку на группу, используя замену $&*   -  person Rockbar    schedule 13.10.2015


Ответы (1)


Обратите внимание, что при поиске текста вы используете шаблон регулярного выражения, а при замене вам нужна строка замены. Строка замены не может содержать шаблоны, но может содержать обратные ссылки на захваченные группы (нумерованные или именованные).

В Java обратные ссылки обозначаются нотацией $+number.

Итак, используя регулярное выражение ((?:\d+\.)?\d+)\s и строку замены $1*, вы можете получить то, что вам нужно: 1.456*substance.

Посмотрите свою обновленную демонстрацию регулярного выражения.

Обратите внимание, что для сопоставления значений с плавающей запятой вы можете использовать шаблоны регулярных выражений (\d+(?:\.\d+)?)\s или (\d*\.?\d+)\s. Сложный шаблон для сопоставления всех типов чисел с плавающей запятой см. в разделе Сопоставление чисел с плавающей запятой с обычным Выражение на сайте Regular-expressions.info.

person Wiktor Stribiżew    schedule 13.10.2015
comment
Обратная ссылка - это то, что я искал. Ваш код как раз и является решением. Большое спасибо! - person Rockbar; 13.10.2015