使用Regex删除不同长度的分号序列

Ric*_*loo 1 regex r stringr

鉴于一些数据:

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

如何删除所有尾随分号以获取:

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

此数据框的功能:

  1. 每行最多9个分号,最多分隔10个字符
  2. 行包含不同数量的字符,分号始终添加到9
  3. 当一行不包含任何字符时,它包含9个分号.

nei*_*fws 5

我认为你想要的正则表达式是"一个或多个分号后跟行尾".这样可行:

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           ;;;;;;;;; 
Run Code Online (Sandbox Code Playgroud)

  • 添加`mutate`来自那些不熟悉的人 (2认同)