使用正则表达式删除不同长度的分号序列
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', '' ))
此数据框的特征:
- 每行最多 9 个分号,最多分隔 10 个字符
- 行包含不同数量的字符,分号总和为 9
- 当一行不包含任何字符时,它包含 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 它们。
;+$
给定一些数据:
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', '' ))
此数据框的特征:
- 每行最多 9 个分号,最多分隔 10 个字符
- 行包含不同数量的字符,分号总和为 9
- 当一行不包含任何字符时,它包含 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 它们。
;+$