Добавьте пробел между числом и условием специального символа R - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь использовать базовые вызовы stringr или R, чтобы условно добавить пробел для экземпляров в большом векторе, где есть числовое значение, а затем специальный символ - в этом случае знак $ без пробела str_pad не позволяет использовать опорные векторы.

Например, для:

$ 6,88 $ 7,34

Я хотел бы добавить пробел после последнего числа и перед следующим знаком доллара:

6,88 $ 7,34

Спасибо!

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Если имеется только один экземпляр, используйте sub для захвата цифры, а $ отдельно и при замене добавьте пробел между обратными ссылками захваченной группы

sub("([0-9])([$])", "\\1 \\2", v1)
#[1] "$6.88 $7.34"

Или с регулярным выражением

gsub("(?<=[0-9])(?=[$])", " ", v1, perl = TRUE)

Данные

v1 <- "$6.88$7.34"
0 голосов
/ 11 января 2019

Это будет работать, если вы работаете с векторной строкой:

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, с _

См. Все регулярные выражения здесь

...