#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. Я заметил, что вы отредактировали выражение и решили попробовать его с помощью узла замены строк. Это работает абсолютно нормально!