如何在R语言中提取冒号与点之间的数字字符串?
提取R语言字符串中冒号后、点号前的数字序列
你有两个明显的问题需要修正:
- 目标字符串没加引号,R会把
11:22334455.CEL当成时间相关序列解析,而非字符串,这就是你得到奇怪结果11216803.CEL的原因。 - 你的正则表达式
\\:*只会删除冒号,完全没处理冒号前的内容和点号后的部分,根本达不到提取目标内容的目的。
正确的gsub写法
先把字符串用引号包裹,再用正则匹配整个字符串,只保留我们需要的部分:
x <- "11:22334455.CEL" gsub(".*:(\\d+)\\..*", "\\1", x)
正则说明:
.*::匹配冒号及它前面的所有内容(\\d+):捕获冒号后到点号前的所有数字(括号用来标记要保留的分组)\\..*:匹配点号及它后面的所有内容\\1:替换成第一个捕获分组的内容,也就是我们要的22334455
更简洁的替代方案:用stringr包的str_extract
如果你已经安装了stringr包,直接提取目标内容会更直观:
library(stringr) x <- "11:22334455.CEL" str_extract(x, "(?<=:)\\d+(?=\\.)")
正则说明:
(?<=:):确保目标数字前面是冒号(不捕获冒号)\\d+:匹配连续的数字(?=\\.):确保目标数字后面是点号(不捕获点号)
不管用哪种方法,运行后都能得到你想要的结果22334455。
内容的提问来源于stack exchange,提问作者Khaleesi95
相关产品推荐
相关产品推荐

