R 从给定度量单位列表的字符串中提取度量单位和附加数字

标签 r substring

我正在使用 R 并且有两个字符向量:

measures <- c('cm', 'mm', 'ml')
strings <- c('hgtrdhg cm12 mhjgf','asdfsf 12mm jhgjhg','adadf 45ml','ml89 jygjgh', 'cm 59 gfhgfd')

我必须为每个字符串提取度量单位和相关数字,例如:

cm12、12mm、45ml、ml89、cm59 (最后一串cm到59之间本来有一个空格)

数字可以位于测量单位的前面或后面。

最佳答案

我们可以循环“度量”并提取元素

library(dplyr)
library(stringr)
library(purrr)
measures %>%
       map(~ str_extract(strings, paste0("\\d*", .x, "\\s*\\d*"))) %>%
    do.call(coalesce, .) %>%
    str_replace_all(" ", "")
#[1] "cm12" "12mm" "45ml" "ml89" "cm59"

或者,如果我们想一次使用所有“度量”,则通过使用 | 进行 collapse粘贴它。

pat <- paste0("(", paste("\\d*", measures, "\\s*\\d*", sep="", collapse="|"), ")")
str_replace_all(str_extract(strings, pat), " ", "")
#[1] "cm12" "12mm" "45ml" "ml89" "cm59"

关于R 从给定度量单位列表的字符串中提取度量单位和附加数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48941566/

相关文章:

r - purrr 循环 : Error: Problem with `mutate()` input `combined_data` . x `x` 和 `y` 必须共享相同的 src,设置 `copy` = TRUE(可能很慢)

r - R 中是否有一种有效的方法将矩阵 M2 的每一行 "paste"到矩阵 M1 的每一行以获得所有可能的组合?

R:带有矢量模式的 agrep

java - 尝试从长字符串中获取字符串时出现 StringIndexOutOfBoundsException

ruby - 我如何检查字符串中是否存在某个单词,如果不存在,则在 ruby​​ 中返回 false?

r - 根据列变量将数据集一分为二,顺序很重要

r - R 中嵌套 For/If 循环的算法效率

string - 合并具有共同开始和结束子串的两个字符串

Javascript RegEx 查找没有子字符串的变量字符串?

MYSQL 在数据库中使用 CONCAT 和 SUBSTRING 以及 http 和 https URLS