在R的strwrap中回车

时间:2017-09-06 06:59:38

标签: r regex

我无法弄清楚如何修改我的输入文本,以便在给定位置开始一个新行,而不用中间的额外行(段落中断)。< / p>

我想要的输出:

Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Vivamus malesuada ante eget lacus aliquam aliquet. Morbi a
nulla in tortor rutrum pulvinar.

Duis auctor condimentum magna ac commodo. Phasellus quis
elementum purus, at ornare magna. Quisque sit amet vehicula
risus. Suspendisse et  et scelerisque velit:
item #1
item #2
item #3

我可以使用\ n来获取分段符号,这可以正常工作,但是如何在没有分段符号的情况下获得一个新行,如底部的项目列表?当我使用\ r ...

txt <- "Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Vivamus malesuada ante eget lacus aliquam aliquet. Morbi a nulla 
in tortor rutrum pulvinar. 
\n
Duis auctor condimentum magna ac commodo. Phasellus quis elementum purus, 
at ornare magna. Quisque sit amet vehicula risus. Suspendisse et 
scelerisque velit:
\r
item #1 
item #2
item #3"
writeLines(strwrap(txt, width=60))

...我得到一个意想不到的结果:一个换行符,但有一个额外的空格缩进以及一些并置和删除文本:

#Lorem ipsum dolor sit amet, consectetur adipiscing elit.
#Vivamus malesuada ante eget lacus aliquam aliquet. Morbi a
#nulla in tortor rutrum pulvinar.
#
#Duis auctor condimentum magna ac commodo. Phasellus quis
#elementum purus, at ornare magna. Quisque sit amet vehicula
# item #1 item #2se et scelerisque velit: 
#item #3

我需要更换/ r以获得单个换行符,例如上面所需输出中的“velit:”和“item#1”之间?我已经阅读了strwrap文档并完成了它的示例,但还没有找到答案。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

在未来其他人发现此问题的变化中,我将分享我在此处使用的解决方案。正如Wiktor在上面指出的那样,strwrap没有这个功能。我最终做的只是一个解决方法,在文本经过strwrap后编辑它。

我在输入中的每一行的开头添加一个任意字符序列,我想以回车符开头。下面我用&#34; / r&#34;为了这。我通过strwrap发送输入,在末尾添加两行空行,然后解析输出的每一行,删除&#34; / r&#34;并删除空的前一行(段落)。这是代码:

txt <- "Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Vivamus malesuada ante eget lacus aliquam aliquet. Morbi a nulla 
in tortor rutrum pulvinar. 
\n
Duis auctor condimentum magna ac commodo. Phasellus quis elementum purus, 
at ornare magna. Quisque sit amet vehicula risus. Suspendisse et 
scelerisque velit:
\n\r item #1 
\n\r item #2
\n\r item #3"

sink("output.txt")
lines <- append(strwrap(txt, width=100), c("",""), after = length(lines))
invisible(lapply(seq_along(lines), function(index) {
  if (index != 1) { #skip first line
    if (!grepl("\r ", lines[index])) { 
       writeLines(gsub("\r ", "", lines[index-1]))
    }
  }
}))
sink()

这将生成一个.txt文件,其输出文本按照需要进行格式化,其中底部的项目列表由回车符/换行符分隔,但输入中标记的段落符号仅为&#34; / n&#34;得到正常对待。