如何删除 R 中除最后一个逗号外的所有逗号

How to remove all but the last comma in R

我有兴趣从字符串中的美元金额中删除除最后一个逗号以外的所有逗号(如果有)。例如,假设我有

x <- c(",450", ",254,345,", ",423,123")

我感兴趣的是这样的:

x
## [1] "50" "54345," "23123"

所以,我想先检查最后是否有逗号。如果是,我将删除除最后一个以外的所有内容。如果末尾没有逗号,我就把它们全部删除。

您可以通过在 ifelse() 中组合 gsub()str_sub() 来实现它。这是一个例子

x1 <- c(",450", ",254,345,", ",423,123")
x1
library(stringr)
x2 <- ifelse(str_sub(x1, -1, nchar(x1)) == ",",
             paste0(gsub(",", "", str_sub(x1, 1, nchar(x1)-1)), ","),
             gsub(",", "", str_sub(x1, 1, nchar(x1))))
x2

这里有 2 个解决方案

gsub(",(\d)", "\1", x)

用数字(捕获组)代替逗号后跟数字

gsub(",(?=\d)", "", x, perl = T)

逗号后必须跟要替换的数字(正先行)

在这两种情况下,如果您想匹配任何符号,则可以将 \d 替换为 .,如果数字:

gsub(",(.)", "\1", x)
gsub(",(?=.)", "", b, perl = T)

regex 有帮助

gsub(",(?!$)", "", x, perl=TRUE)
# "50"     "54345," "23123"

正则表达式模式的解释",(?!$)"

, 匹配所有逗号
(?!$) 否定前瞻,排除字符串末尾的逗号 $