gpt4 book ai didi

string - 使用 R 将字符串括起来,但不将子字符串括在引号中

转载 作者:行者123 更新时间:2023-12-02 06:38:09 25 4
gpt4 key购买 nike

这个问题与我的question about Roxygen.有关

我想编写一个新函数来对字符串进行自动换行,类似于 strwrapstringr::str_wrap,但有以下变化:Any字符串中用引号引起来的元素(子字符串)不得换行。

例如,使用以下示例数据

test <- "function(x=123456789, y=\"This is a long string argument\")"
cat(test)
function(x=123456789, y="This is a long string argument")

strwrap(test, width=40)
[1] "function(x=123456789, y=\"This is a long"
[2] "string argument\")"

我希望 newWrapFunction(x, width=40, ...) 的所需输出为:

desired <- c("function(x=123456789, ", "y=\"This is a long string argument\")")
desired
[1] "function(x=123456789, "
[2] "y=\"This is a long string argument\")"

identical(desired, newWrapFunction(tsring, width=40))
[1] TRUE

你能想出一种方法来做到这一点吗?

<小时/>PS。如果您能帮我解决这个问题,我将建议将此代码作为 roxygen2 的补丁。我已经确定了应该应用此补丁的位置,并将感谢您的贡献。

最佳答案

这是我为获取 strwrap 所做的操作,这样它就不会破坏空格上的单引号部分:A) 通过用“~|~”替换空格来预处理用单引号分割后的“偶数”部分:定义新函数strwrapqt

 ....  
zz <- strsplit(x, "\'") # will be only working on even numbered sections
for (i in seq_along(zz) ){
for (evens in seq(2, length(zz[[i]]), by=2)) {
zz[[i]][evens] <- gsub("[ ]", "~|~", zz[[i]][evens])}
}
zz <- unlist(zz)
.... insert just before
z <- lapply(strsplit) ...........

最后将所有“~|~”替换为空格。可能需要更多地考虑其他类型的空白“事件”才能得到完全常规的治疗。

....
y <- gsub("~\\|~", " ", y)
....

编辑:测试了@joran的建议。对于我正在使用的方法来说,匹配单引号和双引号将是一项艰巨的任务,但如果愿意将任何引号视为与分隔符目标同等有效,则可以使用 zz <- strsplit(x, "\'|\"")作为上面代码中的分割标准。

关于string - 使用 R 将字符串括起来,但不将子字符串括在引号中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7367433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com