如何为括号内并用逗号分隔的字符添加引号?
Posted
技术标签:
【中文标题】如何为括号内并用逗号分隔的字符添加引号?【英文标题】:how to add quotation marks for characters that are inside brackets and separated by a comma? 【发布时间】:2022-01-03 07:01:13 【问题描述】:这个想法是为字符串列表表示中的所有字符串添加引号。
尝试了下一个:
input_text <- "[innovation manager, manager director, senior manager]"
scan(text=input_text, what="")
返回:
'[innovation" "manager," "manager" "director," "senior" "manager]'
预期的输出可能如下所示:
'["innovation manager", "manager director", "senior manager"]'
我错过了什么?
【问题讨论】:
paste0('["', paste(unlist(strsplit(substr(input_text, 2, nchar(input_text)-1), "\\s*,\\s*")), collapse='", "'),'"]')
,见ideone.com/bAuQoL
【参考方案1】:
一种方法——用gsub
去掉方括号,在,
处拆分(strsplit
),提取列表元素,插入双引号(dQuote
),将paste
拆分元素放在一起
sprintf('[%s]', paste(dQuote(strsplit(gsub("[][]", "", input_text),
",\\s*")[[1]], FALSE), collapse=", "))
-输出
[1] "[\"innovation manager\", \"manager director\", \"senior manager\"]"
【讨论】:
你好@akrun,有什么办法可以消除字符串中的反冲? @AlvaroMartinez 这只是逃避。您可以通过cat(sprintf('[%s]', paste(dQuote(strsplit(gsub("[][]", "", input_text), ",\\s*")[[1]], FALSE), collapse=", ")))
查询【参考方案2】:
一个可能的解决方案;
library(tidyverse)
input_text <- "[innovation manager, manager director, senior manager]"
input_text %>%
str_remove_all("\\[|\\]") %>%
str_split(", ") %>% unlist
#> [1] "innovation manager" "manager director" "senior manager"
但是,如果 OP 想要将结果作为单个字符串,可以使用以下内容:
input_text %>%
str_remove_all("\\[|\\]") %>%
str_split(", ") %>%
map(~ str_c('"',.x, '"')) %>% unlist %>%
str_flatten(collapse = ", ") %>%
str_c("[",.,"]")
#> [1] "[\"innovation manager\", \"manager director\", \"senior manager\"]"
【讨论】:
以上是关于如何为括号内并用逗号分隔的字符添加引号?的主要内容,如果未能解决你的问题,请参考以下文章
Pig — 如何加载包含用双引号括起来并用逗号分隔的字段的 CSV 文件