正则表达式逗号不在两个数字之间

时间:2017-10-30 18:47:56

标签: r regex

我正在寻找gsub的正则表达式来删除所有不需要的逗号:

数据:

,,,,,,,12345
12345,1345,1354
123,,,,,,
12345,
,12354

期望的结果:

12345
12345,1345,1354
123
12345
12354

这是我迄今取得的进展:

(,(?!\d+))

2 个答案:

答案 0 :(得分:3)

您似乎想要删除所有前导和尾随逗号。

你可以用

来做
gsub("^,+|,+$", "", x)

请参阅regex demo

正则表达式包含两个替换,^,+在开头匹配1个或多个逗号,,+$在末尾匹配1个以上的逗号,gsub用空字符串替换这些匹配。< / p>

参见R demo

x <- c(",,,,,,,12345","12345,1345,1354","123,,,,,,","12345,",",12354")
gsub("^,+|,+$", "", x)
## [1] "12345"           "12345,1345,1354" "123"             "12345"          
## [5] "12354"     

答案 1 :(得分:2)

您还可以使用str_extract中的stringr。由于贪婪匹配,您不必指定数字出现的次数,自动选择最长匹配:

library(dplyr)
library(stringr)

df %>%
  mutate(V1 = str_extract(V1, "\\d.+\\d"))

或者您更喜欢base R

df$V1 = regmatches(df$V1, gregexpr("\\d.+\\d", df$V1))

<强>结果:

               V1
1           12345
2 12345,1345,1354
3             123
4           12345
5           12354

数据:

df = read.table(text = ",,,,,,,12345
                12345,1345,1354
                123,,,,,,
                12345,
                ,12354")