我正在执行此简单命令,该命令使用字符串“ A”,并使用空格将其拆分为单词。现在,将此单词向量传递给replace方法,在该方法中它将所有看起来像完整数字的内容替换为“ P12”。但是最后的操作使输出变得混乱
A <- list(c("a12, 34, 35, 46"),c("ab14, 44, 55, 66"))
B <- stringr::str_split(A, "[[:space:]]") %>% str_replace(pattern = "^[:digit:]{1,}[,]{1}$", replacement = "p12")
输出:
[1] "c(\"a12,\", \"34,\", \"35,\", \"46\")"
已更新:所需的输出应包含两个字符向量,这些向量存储在名为B的列表中:
[1] list(c("a12", "34", "35", "46"), c("ab14", "44", "55", "66"))
已回答了这一部分。谢谢! 还请帮助正则表达式。当我使用下面的命令时,46未被替换。我应该如何确保1)文本是一个完整的数字,后跟一个逗号,或者没有逗号被“ p12”替换?
str_replace(c("a12,", "34,", "35,", "46"), pattern = "^[:digit:]{1,}[,]{1}$", replacement = "p12")
输出:
"a12," "p12" "p12" "46"
所需:
"a12," "p12" "p12" "p12"
任何帮助将不胜感激
答案 0 :(得分:1)
str_split
返回一个字符向量列表。您只想unlist()
。虽然不直观,但可以处理字符向量输入(每个元素一个列表)。
关于正则表达式,最后一个数字没有逗号。尝试让它与0或1个逗号匹配:
library(dplyr)
library(stringr)
A <- "a12, 34, 35, 46"
str_split(A, "[[:space:]]") %>%
unlist() %>%
str_replace(pattern = "^[:digit:]{1,}[,]{0,1}$", replacement = "p12")
输出:
#[1] "a12," "p12" "p12" "p12"
答案 1 :(得分:1)
您可以使用lapply对每个列表元素进行替换。您的问题尚不清楚(并且一直在变化),所以我不确定您是否要在输出中使用逗号。
对于带有逗号的解决方案,我们可以使用:
str_split(A, "[[:space:]]") %>%
lapply(function(x) gsub("\\b\\d+\\b", "p12", x))
# [[1]]
# [1] "a12," "p12," "p12," "p12"
#
# [[2]]
# [1] "ab14," "p12," "p12," "p12"
不带逗号:
str_split(A, boundary('word')) %>%
lapply(function(x) gsub("\\b\\d+\\b", "p12", x))
# [[1]]
# [1] "a12" "p12" "p12" "p12"
#
# [[2]]
# [1] "ab14" "p12" "p12" "p12"