Это будет работать, если вы работаете с векторной строкой:
mystring<-as.vector('$6.88$7.34 $8.34$4.31')
gsub("(?<=\\d)\\$", " $", mystring, perl=T)
[1] "$6.88 $7.34 $8.34 $4.31"
Это относится и к случаям, когда уже есть место.
По вопросу, заданному в комментариях:
mystring2<-as.vector('Regular_Distribution_Type† Income Only" "Distribution_Rate 5.34%" "Distribution_Amount $0.0295" "Distribution_Frequency Monthly')
gsub("(?<=[[:alpha:]])\\s(?=[[:alpha:]]+)", "_", mystring2, perl=T)
[1] "Regular_Distribution_Type<U+2020> Income_Only\" \"Distribution_Rate 5.34%\" \"Distribution_Amount $0.0295\" \"Distribution_Frequency_Monthly"
Обратите внимание, что \ появляется из-за вложенных кавычек в векторе, не должно иметь значения. Также <U+2020>
появляется из-за кодирования специального символа.
Объяснение регулярного выражения:
(?<=[[:alpha:]])
Эта первая часть представляет собой позитивный взгляд, созданный ?<=
, он в основном смотрит за всем, что мы пытаемся сопоставить, чтобы убедиться, что то, что мы определяем в взгляде, есть. В этом случае мы ищем [[:alpha:]]
, который соответствует буквенному символу.
Затем мы проверяем пробел с помощью \s
, в R мы должны использовать двойной escape, поэтому \\s
, это то, что мы пытаемся найти.
Наконец, мы используем (?=[[:alpha:]]+)
, который является положительным прогнозом, определяемым ?=
, который проверяет, чтобы убедиться, что за нашим соответствием следует другая буква, как объяснено выше.
Логика состоит в том, чтобы найти пробел между буквами и сопоставить пробел, который затем заменяется gsub, с _
См. Все регулярные выражения здесь