我想从下面的数组中删除 & 和 . 并只提取数字,
x = as.factor(c(".&.", "0.0119885482338&.&.", ".&2.25880593895", ".&.&.&.&.&.&.&.", ".&0.295142083575&.", "0.708323350364",".&.&0.193766679861",".&.&.&.&7.65239874523E-4&.&."))
我尝试了以下 gsub()
命令:
gsub("[^0-9.E-]","",x)
输出:
".." "0.0119885482338.." ".2.25880593895"
"........"
".0.295142083575." "0.708323350364" "..0.193766679861"
"....7.65239874523E-4.."
更新上述 gsub
命令的任何建议,以便输出如下所示:
"" "0.0119885482338" "2.25880593895" "" "0.295142083575"
"0.708323350364" "0.193766679861" "7.65239874523E-4"
最佳答案
你可以使用
> sub("^.*?(?:([-+]?\\d*\\.?\\d+(?:[eE][-+]?\\d+)?).*|$)","\\1",x)
[1] "" "0.0119885482338" "2.25880593895" "" "0.295142083575" "0.708323350364" "0.193766679861" "7.65239874523E-4"
参见 regex demo .
详细信息:
^
- 字符串的开始.*?
- 任何文本,尽可能短(?:
- 非捕获组的开始:
([-+]?\\d*\\.?\\d+(?:[eE][-+]?\\d+)?)
- 第 1 组(\1
): number pattern .*
- 字符串的其余部分|
$
- 字符串结尾)
- 非捕获组结束。查看 online R demo :
x=as.factor(c(".&.", "0.0119885482338&.&.", ".&2.25880593895", ".&.&.&.&.&.&.&.", ".&0.295142083575&.", "0.708323350364",".&.&0.193766679861",".&.&.&.&7.65239874523E-4&.&."))
sub("^.*?(?:([-+]?\\d*\\.?\\d+(?:[eE][-+]?\\d+)?).*|$)","\\1",x)
## => [1] "" "0.0119885482338" "2.25880593895" ""
## [5] "0.295142083575" "0.708323350364" "0.193766679861" "7.65239874523E-4"
https://stackoverflow.com/questions/67456482/