regexReplace в KNIME для обработки строк

#regex #knime

#регулярное выражение #knime

Вопрос:

Я пытаюсь удалить содержимое всех ячеек, которые начинаются с символа, который не является числом, используя KNIME (v3.2.1). У меня есть разные идеи, но ничего не работает.

1) Узел для обработки строк: regexReplace(§column§,"^[^0-9].*","")

Ячейки содержат несколько строк, однако при таком подходе удаляется только первая строка.

2) Узел обработки строк: regexMatcher($casrn_new$,"^[^0-9].*") за ним следует узел механизма правил для удаления всех столбцов, которые являются «ИСТИННЫМИ».

Сопоставитель регулярных выражений выдает мне «False» даже для столбцов, которые должны быть «True».

3) Узел замены строки: я вставил выражение ^[^0-9].* в столбец шаблона и выбрал «Заменить всю строку», но регулярное выражение не распознается этим узлом, поэтому ничего не заменяется.

У кого-нибудь есть решение для любого из этих подходов или знает другой узел, который мог бы выполнить эту работу? Помощь очень ценится!

Ответ №1:

Я бы выбрал ваше первое решение, поскольку оно уже сработало, вам просто нужно расширить свое регулярное выражение, чтобы включить новые строки. Я бы попробовал что-то вроде этого:

regexReplace($column$,"^[^0-9].(.|n)*","")

Это должно соответствовать любому тексту, начинающемуся с символа, который не является числом, за которым следует любое количество вхождений любого символа или новой строки. В зависимости от окончаний строк вам может понадобиться (.|n|r) вместо (.|n) .

Комментарии:

1. Я действительно пытался regexReplace($column$,"^[^0-9](.|n)*","") раньше, но это не сработало. (.|n|r) было решением проблемы! Большое спасибо!

Ответ №2:

Вы должны использовать следующее выражение:

 "(?s)^D.*$"
  

Таким образом, точка будет соответствовать даже новым строкам. (На основе этого: https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html#DOTALL )

В случае, если вам нужно изменить только содержимое ячеек, которые не начинаются с числа, я не думаю, что вам нужно фильтровать какие-либо столбцы или строки. (Кстати, на случай, если вы хотите удалить строки, существуют основанные на правилах узлы фильтра / разделителя строк, которые также поддерживают регулярные выражения с предикатом MATCHES .)

Комментарии:

1. Выражение не работало должным образом в KNIME, но полезно знать, что ?m оно существует. Также спасибо за другую информацию!

2. Я заметил, что вы отредактировали выражение и решили попробовать его с помощью узла замены строк. Это работает абсолютно нормально!