#regex #knime
#регулярное выражение #knime
Вопрос:
У меня есть список имен, разделенных точкой с запятой:
БорисоваСветлана А.;КимХак Joong;PuXiaotao;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;LiuHung-wen*;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?
Я хотел бы удалить все «?;», но только если они встречаются в этом шаблоне.
Я использую KNIME и пытался использовать regexReplace($col1$,"[?;]","")
or regexReplace($col1$,"?;","")
в узле обработки строк, но все экземпляры ? и ; удалены.
Я хочу, чтобы результат был
БорисоваСветлана А.; КимХак Чжун; Пусяотао; Люхунг-вен*
но фактический результат
БорисоваСветлана А.КимХак ДжунгПуКсиотаоЛиуХунг-вен*
Я был бы очень признателен за любые указания в правильном направлении, поскольку я новичок как в KNIME, так и в regex.
Комментарии:
1. Попробуйте
regexReplace($col1$,"([?];) ","")
или"([?];){2,}"
2. Или попробуйте
regexReplace($col1$,"(;[?]) ","")
или"(;[?]){2,}"
3.
regexReplace($col1$,"(;[?]) ","")
сработало отлично, спасибо!
Ответ №1:
Вы можете избежать ?
вместо того, чтобы помещать его в альтернативные варианты, подобные этому: ?
. Поскольку
необходимо экранировать из-за кавычек, правильное экранирование находится \?
внутри строки. Итак, для вашего запроса должно сработать следующее:
regexReplace($col1$,"\?;","")
Для вашего ввода он выдает:
BorisovaSvetlana A.;KimHak Joong;PuXiaotao;LiuHung-wen*;?
Комментарии:
1. Спасибо. Это было бы идеально, если бы «;?» в конце каждой записи также можно было исключить.
2. Я думаю, что на самом деле вы хотели противоположный порядок элементов, но мой ответ соответствовал тому, о чем вы просили. Итак, следующее должно выполнять то, что вы хотите:
regexReplace($col1$,";\?","")
Ответ №2:
Используйте регулярное выражение: (?:;?)
и замените на пустую строку, чтобы удалить ?;
. Пожалуйста, обратите внимание, что это соответствует 478 шагам. ДЕМОНСТРАЦИЯ
Затем используйте Regex: ([A-Z][a-z *.-] )([A-Z][A-Za-z *.-] )(?=;|$)
и замените на $1, $2
, чтобы получить ожидаемый результат. ДЕМОНСТРАЦИЯ
regexReplace(regexReplace($col1$,"(?:;?) ",""), "([A-Z][a-z *.-] )([A-Z][A-Za-z *.-] )(?=;|$)", " $1, $2")
Комментарии:
1. Спасибо. Пробовал это, но это просто удалило все «;», но ни один из «?».