如何删除文本中的某些行?

How to remove certain lines in a text?

data <- "as follows:\n\n          YEAS--231\n\n     Adams\n     Aguilar\n "

我想要以 2 个或更少空白开头的行 space,输出如下:

"as follows:"

并删除以 3 个或更多空格 space 开头的行。

text <- str_split(data,"\n")

“文本”的类型是列表,有没有办法将“文本”转换为字符?或者有其他方法可以得到我的结果吗?

这是 tidyverse 方式:

library(tidyverse)
data <- "as follows:\n\n          YEAS--231\n\n     Adams\n     Aguilar\n "
cat(data)
#> as follows:
#> 
#>           YEAS--231
#> 
#>      Adams
#>      Aguilar
#> 

data %>%
  # apply functions on each line
  str_split("\n") %>%
  simplify() %>%
  # lines starting with at least 3 spaces
  discard(~ .x %>% str_starts("[ ]{3}")) %>%
  # empty lines
  discard(~ .x %>% str_trim() == "") %>%
  paste0(collapse = "\n") %>%
  cat()
#> as follows:

reprex package (v2.0.1)

于 2021-09-26 创建

您可以在 '\n' 上拆分字符串,并在 grep return 上拆分字符串开头少于 3 个空格的字符串。

data <- "as follows:\n\n          YEAS--231\n\n     Adams\n     Aguilar\n "
grep('^\s{3,}', unlist(strsplit(trimws(data), '\n+')), value = TRUE, invert = TRUE)
#[1] "as follows:"

使用stringr函数-

library(stringr)
library(magrittr)

str_split(trimws(data), '\n+') %>%
  unlist() %>%
  str_subset('^\s{3,}', negate = TRUE)