stringr :: str_wrap不会完全每n个字符换行

时间:2018-07-25 09:50:07

标签: r regex string

下面的代码不会在每第三个字符后插入新行,这就是我认为的str_wrap。显然,还有其他一些基本逻辑。当字符串包含一些特殊字符时,我也会得到怪异的结果。

t<-c("The adds fundamental principle”, The discriminatory ")
str_wrap(t,3)

结果是

> str_wrap(t,3)
[1] "The\nadds\nfundamental\nprinciple"

2 个答案:

答案 0 :(得分:1)

str_wrapstringi::stri_wrap的包装,不会破坏单个单词。它的预期用途是将文本包装在段落中,而您不想在其中将单词分成多行。如果要每三个字符换行,则可以提取三个字符模式.{3}并将它们与换行符连接在一起,如图所示。请注意留有空格:如果您要先删除空格,则可以。第二个匹配选项{0,2}$表示将返回末尾的其余字符,而不是默默地删除它们。

t <- c("The adds fundamental principle”, The discriminatory a")
library(stringr)
#> Warning: package 'stringr' was built under R version 3.5.1
t %>%
  str_extract_all(".{3}|.{0,2}$") %>%
  `[[`(1) %>%
  str_c(collapse="\n") %>%
  writeLines()
#> The
#>  ad
#> ds 
#> fun
#> dam
#> ent
#> al 
#> pri
#> nci
#> ple
#> ”, 
#> The
#>  di
#> scr
#> imi
#> nat
#> ory
#>  a

reprex package(v0.2.0)于2018-07-25创建。

答案 1 :(得分:0)

除了Calum You很好的答案之外,您还可以通过以下方式更简单地编写此代码:将任何3个字母的代码块与换行符一起替换:

t = c("The adds fundamental principle, The discriminatory a")
library(stringr)
out = str_replace_all(t, paste0("(.{3})"), "\\1\n")
cat(out)
#> The
#>  ad
#> ds 
#> fun
#> dam
#> ent
#> al 
#> pri
#> nci
#> ple
#> , T
#> he 
#> dis
#> cri
#> min
#> ato
#> ry 
#> a

由reprex软件包(v0.3.0)创建于2020-08-16