我怎样才能(最快速的)从字符串的数字部分删除逗号而不影响字符串中其余的逗号。因此,在下面的示例中,我想从数字部分中删除逗号但是狗之后的逗号应该保留(是的,我知道1023455中的逗号是错误的,但只是抛出一个角落案例)。
我有什么:
x <- "I want to see 102,345,5 dogs, but not too soo; it's 3,242 minutes away"
期望的结果:
[1] "I want to see 1023455 dogs, but not too soo; it's 3242 minutes away"
规定:必须在基础上完成,不要在包装上添加。
提前谢谢。
修改 谢谢Dason,Greg和Dirk。你的反应都很好。我正在玩一些接近Dason的回应,但在括号内有逗号。现在看它甚至没有意义。我在这里微缩标记了两个响应,因为我需要速度(文本数据):
Unit: microseconds
expr min lq median uq max
1 Dason_0to9 14.461 15.395 15.861 16.328 25.191
2 Dason_digit 21.926 23.791 24.258 24.725 65.777
3 Dirk 127.354 128.287 128.754 129.686 154.410
4 Greg_1 18.193 19.126 19.127 19.594 27.990
5 Greg_2 125.021 125.954 126.421 127.353 185.666
给大家+1。
答案 0 :(得分:9)
您可以使用数字本身替换带有模式(逗号后跟数字)的任何内容。
x <- "I want to see 102,345,5 dogs, but not too soo; it's 3,242 minutes away"
gsub(",([[:digit:]])", "\\1", x)
#[1] "I want to see 1023455 dogs, but not too soo; it's 3242 minutes away"
#or
gsub(",([0-9])", "\\1", x)
#[1] "I want to see 1023455 dogs, but not too soo; it's 3242 minutes away"
答案 1 :(得分:7)
使用Perl regexp,并专注于“数字逗号数字”,然后我们只用数字替换:
R> x <- "I want to see 102,345,5 dogs, but not too soo; it's 3,242 minutes away"
R> gsub("(\\d),(\\d)", "\\1\\2", x, perl=TRUE)
[1] "I want to see 1023455 dogs, but not too soo; it's 3242 minutes away"
R>
答案 2 :(得分:6)
以下是几个选项:
> tmp <- "I want to see 102,345,5 dogs, but not too soo; it's 3,242 minutes away"
> gsub('([0-9]),([0-9])','\\1\\2', tmp )
[1] "I want to see 1023455 dogs, but not too soo; it's 3242 minutes away"
> gsub('(?<=\\d),(?=\\d)','',tmp, perl=TRUE)
[1] "I want to see 1023455 dogs, but not too soo; it's 3242 minutes away"
>
它们都匹配一个数字后跟一个逗号后跟一个数字。 [0-9]
和\d
(额外的\
转义第二个,以便它通过常规的关注)都匹配一个数字。
第一个epression捕获逗号前的数字和逗号后的数字,并在替换字符串中使用它们。基本上将它们拉出并放回去(但不要把逗号放回去)。
第二个版本使用零长度匹配,(?<=\\d)
表示在逗号之前需要有一个数字才能匹配,但数字本身不是匹配的一部分。 (?=\\d)
表示逗号后面需要一个数字才能匹配,但匹配中不包含该数字。所以基本上它与逗号匹配,但前提是前后跟一个数字。由于只匹配逗号,因此替换字符串为空意味着删除逗号。