Замените строку Knime, замените все, пока какая-нибудь специальная строка - PullRequest
1 голос
/ 08 ноября 2019

У меня есть знакомый вопрос к этому . Я также использую узел манипуляции со строками.

Прямо сейчас у меня есть следующие строки (в столбце):

Order[NN(STTS)]
523:10[CARD(STTS)]
Euro12[NN(STTS)]

Я хочу получить вывод:

[NN(STTS)]
[CARD(STTS)]
[NN(STTS)]

Как я могу использовать stringManipulation длясделайте так, прямо сейчас я использую:

regexReplace($List(Term)$, "/(.*?)\[" , "[")

Вывод, который я получаю в настоящее время:

?
?
?

Если я проверяю его онлайн с помощью регулярного выражения Java: https://regex101.com/r/z6eOHv/1 Вывод выглядит нормально: enter image description here

В чем моя ошибка?

1 Ответ

2 голосов
/ 08 ноября 2019

«Быстрое исправление» - это regexReplace($List(Term)$, "(.*?)\\[" , "["): / выглядит как остаток литеральной записи регулярного выражения, используемой в сервисах онлайн-тестирования регулярных выражений, здесь она не нужна, так как регулярные выражения Java определяются с помощью простых строковых литералови последний [ должен быть дважды экранирован в строковом литерале.

Однако вы можете просто использовать

regexReplace($List(Term)$, "^[^\\[]+" , "")

Строка регулярного выражения ^[^\[]+, см. regex demo . Он соответствует

  • ^ - начало строки
  • [^\[]+ - 1 или более (квантификатор + соответствует 1 или более экземплярам) символов, отличных от [ ([^...] является отрицательным символьным классом, соответствующим всем символам, отличным от указанных в классе).

Поскольку строковые литералы поддерживают escape-последовательности строк (например, табуляцию, \t или перевод строки, \n) обратные косые черты должны быть удвоены, чтобы вводить одинарные буквенные косые черты.

...