str_match_all с переводом строки? - PullRequest
0 голосов
/ 27 января 2020

Это извлекает текст между «здесь» и «текстом»

test <- "here is some text"
str_match_all(test, "here(.*?)text")
# [[1]]
# [,1]                [,2]       
# [1,] "here is some text" " is some "

Но разрывы строк мешают - как мы можем извлечь все, что находится между «здесь» и «текстом» включая разрывы строк?

test <- "here 
is 
some 
text"

str_match_all(test, "here(.*?)text")
# [[1]]
# [,1] [,2]

1 Ответ

2 голосов
/ 27 января 2020

Можно использовать опцию выбора символа пробела " \\ s ". Эта строка " (. | \\ s) " представляет любой символ или пробела.

str_match_all(test, "here((.|\\s)*?)text")


[[1]]
     [,1]                    [,2]            [,3]
[1,] "here \nis \nsome \ntext" " \nis \nsome \n" "\n"

РЕДАКТИРОВАТЬ
Вот еще одна форма, которая работает лучше (только две части, но все еще дополнительный разрыв строки в конце):

str_match_all(test, "here([[[:alnum:]]|[[:space:]]]+?)text")
[[1]]
     [,1]                      [,2]             
[1,] "here \nis \nsome \ntext" " \nis \nsome \n"
...