regex - 从包含 '|' 的字符串中提取数字

标签 regex string r split

我有一些数据是由“|”分隔的数字,例如:

head(mintimes)
[1] "3121|3151" "1171"      "1351|1381" "1050"      ""          "122" 
head(minvalues)
[1] 14    10    11    31 Inf    22

我想做的是一直提取并将它们与最小值匹配。最后得到类似的东西:
times    values
3121     14
3151     14
1171     10
1351     11
1381     11
1050     31
122      22

我试过 strsplit(mintimes, "|")我试过str_extract(mintimes, "[0-9]+")但它们似乎不起作用。有任何想法吗?

最佳答案

|是一个正则表达式元字符。在字面上使用时,这些特殊字符需要使用 [] 进行转义。或与 \\ (或者您可以在某些函数中使用 fixed = TRUE)。所以您调用strsplit()应该

strsplit(mintimes, "[|]")

或者
strsplit(mintimes, "\\|")

或者
strsplit(mintimes, "|", fixed = TRUE)

关于您对 stringr 的其他尝试函数, str_extract_all()似乎可以解决问题。
library(stringr)
str_extract_all(mintimes, "[0-9]+")

获得您想要的结果 ,
> mintimes <- c("3121|3151", "1171", "1351|1381", "1050", "", "122") 
> minvalues <- c(14, 10, 11, 31, Inf, 22)
> s <- strsplit(mintimes, "[|]")
> data.frame(times = as.numeric(unlist(s)), 
             values = rep(minvalues, sapply(s, length)))
#   times values
# 1  3121     14
# 2  3151     14
# 3  1171     10
# 4  1351     11
# 5  1381     11
# 6  1050     31
# 7   122     22

关于regex - 从包含 '|' 的字符串中提取数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24254283/

相关文章:

c# - 用于转换超链接的 RegExp 帮助

regex - 在 Xcode 4 中使用通配符查找和替换

regex - 将文本文件中的匹配行组合在一起

c - 基于规则的语法检查器

无法将参数1从 'char [20][20]'转换为 'char ** '?

r - 实现自定义 Cpp 函数以在 R 中的 terra::focalcpp 中使用

python - 在Python中获取括号内的字符串

python - 如何在不删除重复项的情况下找到最常用的单词?

r - 使用 dplyr 和 mutate 在相同数据中为数据子集创建变量/列

r - 为ggplot2中的每个方面添加不同的辅助x轴