如何为括号内并用逗号分隔的字符添加引号?

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 文件

如何为逗号分隔的字符串编写具有匹配组的正则表达式

YAML格式的语法

如何使用Java为列表中的每个字符串添加或插入'(单引号),其中字符串用逗号分隔

如何在Oracle中的case语句中添加两个用逗号分隔的引号的字符