使用正则表达式

时间:2017-11-06 01:53:06

标签: r regex stringr

给出一些数据:

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 个答案:

答案 0 :(得分: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           ;;;;;;;;; 

答案 1 :(得分:4)

您可以使用以下正则表达式,在字符串末尾选择1个或多个分号的所有序列,并将其替换为&#39;&#39;为了修剪它们。

;+$