Поставьте точку перед буквой - PullRequest
4 голосов
/ 18 июня 2020

Мне нужно поставить точку перед буквой в этом типе строк

имя набора данных: V2

6K102 62D102 627Z102

Я хотел бы получить это :

6.K102 62.D102 627.Z102

Я использую это регулярное выражение:

mutate(V2 = gsub("^[A-Z]",'\\.', V2))

Ответы [ 4 ]

4 голосов
/ 18 июня 2020

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

^(\d+)([A-Z])

В качестве замены используйте "\\1.\\2"

sub("^([0-9]+)([A-Z])", "\\1.\\2", V2)
3 голосов
/ 18 июня 2020

вы можете использовать sub("([A-Z])",".\\1", V2)

1 голос
/ 18 июня 2020

В вашем регулярном выражении отсутствует группа захвата вокруг буквенного шаблона (чтобы вы могли сохранить его после замены) и содержит избыточный ^ якорь, который соответствует начальному положению строки. Кроме того, вы используете функцию gsub, в то время как вам просто нужен sub, так как ожидается только одна замена.

Используйте

sub("([[:upper:]])", ".\\1", V2)

с stringr (см. демо ):

stringr::str_replace(V2, "[[:upper:]]", "\\.\\0")

Подробности

  • sub - заменяется только первое совпадение
  • ([[:upper:]]) - соответствует, а захватывает любую заглавную букву в Группу 1 (позже упоминается \1 из шаблона замены)
  • \1 - значение Группы 1 (заглавная буква соответствует )

Обратите внимание, что решение stingr использует \0, заполнитель для всего значения соответствия, поэтому нет необходимости фиксировать заглавную букву в шаблоне регулярного выражения.

См. R демо :

V2 <- c("6K102","62D102","627Z102")
sub("([[:upper:]])", ".\\1", V2)
# => [1] "6.K102"   "62.D102"  "627.Z102"
0 голосов
/ 18 июня 2020

Это относится к вопросу до его обновления .

Обычно \u2022 печатает маркер в текстовых элементах. Поэтому, если ваш вопрос касается label, вы можете просто вставить его туда "\ u2022 ..."

В противном случае, для текстовых элементов в наборах данных, таких как V2, вы можно обойти, применив paste0 в сочетании с ifelse. В этом случае ваши текстовые элементы, для которых вам нужна черная точка спереди, если, хранятся в V2$name

V2$name <- ifelse(V2$name==1,1,paste0("\u2022", V2$name))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...