我有一个像这样的字符串列表:
mystr <- c("16.142.8",
"52.135.1",
"40.114.4",
"83.068.8",
"83.456.3",
"55.181.5",
"76.870.2",
"96.910.2",
"17.171.9",
"49.617.4",
"38.176.1",
"50.717.7",
"19.919.6")
我知道第一个点.
只是一个千位分隔符,而第二个点是十进制运算符。
我想将字符串转换为数字,因此第一个应该变为16142.8,第二个变为52135.1,依此类推。
我怀疑它是用正则表达式完成的,但我不确定如何。有什么想法吗?
答案 0 :(得分:4)
您需要一个基于预测的PCRE正则表达式gsub
:
gsub("\\.(?=[^.]*\\.)", "", mystr, perl=TRUE)
<强>详情
\\.
- 一个点(?=[^.]*\\.)
- 后面跟着.
以外的0个或多个字符(与[^.]*
匹配),然后是文字.
。 (?=...)
是一个积极的先行,需要一些模式立即显示在当前位置的右侧,但不会添加到匹配值,并且正则表达式索引保持在同一个地方,即不是高级答案 1 :(得分:1)
简单的“sub”可以实现相同的效果,因为它只会替换第一个匹配模式。例如,
sub("\\.", "", mystr)