使用正则表达式删除不同长度的分号序列

Remove semicolons sequences of differing length with 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 个分号。

我想你想要的正则表达式,用文字来说就是 "one or more semicolons followed by end of line"。所以这有效:

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           ;;;;;;;;; 

您可以使用以下正则表达式 select 字符串末尾的所有 1 个或多个分号序列,并将其替换为 '' 以便 trim 它们。

;+$