поиск в регулярном выражении POSIX для соответствия всем пробелам, кроме последнего (для gsub)

... схожу с ума из-за этой простой проблемы:

Я использую конвейер Ingest с процессором gsub для замены всех (белых) пробелов, кроме последнего. Например:

"hello world regex is fubar " привести к "hello, world, regex, is, fubar"

Как я могу преобразовать синтаксис PCRE (который, как я выяснил, не работает с шаблонами gsub TRE)

"/\s(?=.\S*)/g"

В POSIX, например...

"/[[:space:]](?=.[[:space:]]*)/g"

(заменяются только пробелы, а не поиск)

Изменить: поскольку я могу предоставить регулярное выражение только в строке, я не могу использовать другой процессор, кроме gsub. '\s' или '\S' явно помечены как "неизвестно".

1 ответ

Решение

Работал с использованием" +([^ ])" - другое решение было бы " +(.)". (Оба без двойных кавычек)

со строкой замены / подстановки ,$1.

Спасибо Wiktor Stribiżew за указание на это.

По какой-то причине литерал POSIX [:space] не работает, почему [[:space:]]+(.)тоже не сработало, даже если это правильное регулярное выражение.

Другие вопросы по тегам