Удалите последовательности точек с запятой разной длины с помощью Regex

Учитывая некоторые данные:

test <- data.frame(strings = c('a;b;c;;;;;;;', 'd;e;f;g;h;i;j;k;l;m', 'n;o;p;q;r;;;;;', ';;;;;;;;;' ))

Как мне удалить все конечные точки с запятой, чтобы получить:

test <- data.frame(strings = c('a;b;c', 'd;e;f;g;h;i;j;k;l;m', 'n;o;p;q;r', '' ))

Особенности этого кадра данных:

  1. максимум 9 точек с запятой в строке, разделяя не более 10 символов
  2. строки содержат различное количество символов, а точки с запятой всегда добавляют к 9
  3. когда строка не содержит символов, она содержит 9 точек с запятой.

2 ответа

Решение

Я думаю, что вы хотите выразить словами "одна или несколько точек с запятой, за которыми следует конец строки". Так что это работает:

library(dplyr)
test %>% 
  mutate(newstrings = gsub(";{1,}$", "", strings))

              strings          newstrings
1        a;b;c;;;;;;;               a;b;c
2 d;e;f;g;h;i;j;k;l;m d;e;f;g;h;i;j;k;l;m
3      n;o;p;q;r;;;;;           n;o;p;q;r
4           ;;;;;;;;; 

Вы можете использовать следующее регулярное выражение, чтобы выбрать всю последовательность из 1 или более точек с запятой в конце вашей строки и заменить ее на '', чтобы обрезать их.

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