如何在R语言中提取点后1位数字并得到目标字符串输出?
解决R语言中提取指定内容的正则方案
处理向量x
要保留每个字符串中.后的第一位数字,去掉该数字之后的所有内容,使用sub配合捕获组实现:
x = c("Apple.4XD", "Home.23", "Tea.459", "So.5S6") x_result <- sub("(\\.[0-9]).*", "\\1", x) x_result # 输出:[1] "Apple.4" "Home.2" "Tea.4" "So.5"
正则说明
(\\.[0-9]):捕获.和紧随其后的第一位数字,作为分组1.*:匹配该数字之后的所有任意字符- 替换为
\\1:保留分组1的内容,即保留.数字部分,去掉后续所有字符
处理向量y
需要分两种情况处理:如果最后一段无.则直接保留;如果最后一段无效(无数字的.),则提取最后一个带有.数字的片段,保留前缀和第一位数字,用一个正则即可实现:
y = c("Apple22.1/Apple23", "Home.23/Home.2S/Home") y_result <- sub(".*/(\\w+)$|.*?(\\w+)\\.([0-9]).*", "\\1\\2\\3", y) y_result # 输出:[1] "Apple23" "Home2"
正则说明
- 分支1
.*/(\\w+)$:匹配最后一个/之后的所有单词字符(即最后一段),捕获为分组1,用于直接保留无.的最后一段 - 分支2
.*?(\\w+)\\.([0-9]).*:非贪婪匹配任意字符,捕获.前的前缀(分组2)和.后的第一位数字(分组3),用于处理需要提取数字的情况 - 替换为
\\1\\2\\3:优先使用分组1的内容,若无则拼接分组2和分组3的内容
内容的提问来源于stack exchange,提问作者user20137369
相关产品推荐
相关产品推荐

