如何在R语言中提取与字符串中间字符关联的完整数字?
解决方法
核心思路是先提取所有与点(.)直接相邻的数字块,再从中筛选出长度最长的(若多个数字块长度相同,则取位置最靠前的)。
正则表达式说明
使用的正则为:(?<=\\.)\\d+|\\d+(?=\\.)
(?<=\\.)\\d+:匹配前面紧跟一个点的连续数字(例如"1.345"里的"345"、"..345"里的"345")\\d+(?=\\.):匹配后面紧跟一个点的连续数字(例如"123.5"里的"123"、".234."里的"234")- 用
|连接两种模式,覆盖所有与点直接关联的数字块。
R代码实现
library(stringr) vec <- c("1.345", "123.5", ".234.", "..345", "..3.5") # 提取所有符合条件的数字块 extracted_blocks <- str_extract_all(vec, "(?<=\\.)\\d+|\\d+(?=\\.)") # 筛选每个字符串的目标数字 target_numbers <- sapply(extracted_blocks, function(blocks) { if (length(blocks) == 0) return(NA) # 找到最长的数字块,长度相同则取第一个 blocks[which.max(nchar(blocks))][1] }) # 输出结果 target_numbers
运行代码后得到的结果为:
[1] "345" "123" "234" "345" "3"
内容的提问来源于stack exchange,提问作者Colm Fearon
相关产品推荐
相关产品推荐

