R / stringr: разбить строку, но оставить разделители в выходных данных - PullRequest
0 голосов
/ 01 июня 2018

Я пытался найти решение, но оказалось, что нет четкого ответа на вопрос R.
Я пытаюсь разбить строку по образцу, скажем, пробела и заглавной буквы, и я использую stringr пакет для этого.

x <- "Foobar foobar, Foobar foobar"
str_split(x, " [:upper:]")

Обычно я получаю:

[[1]]
[1] "Foobar foobar," "oobar foobar"  

Вывод, который я хотел бы получить, однако, должен включать письмо от разделителя:

[[1]]
[1] "Foobar foobar," "Foobar foobar"

Возможно, в stringr нет готового решения, такого как обратные ссылки, поэтому я был бы рад получить любую помощь.

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Мы можем использовать регулярное выражение, чтобы разделить пробел между , и символом верхнего регистра

str_split(x, "(?<=,) (?=[A-Z])")[[1]]
#[1] "Foobar foobar," "Foobar foobar" 
0 голосов
/ 01 июня 2018

Вы можете разделить пробелами 1+, за которыми следует заглавная буква:

> str_split(x, "\\s+(?=[[:upper:]])")
[[1]]
[1] "Foobar foobar," "Foobar foobar" 

Здесь

  • \\s+ - 1 или более пробелов
  • (?=[[:upper:]]) - положительный прогноз ( непотребляющий шаблон ), который проверяет только прописную букву непосредственно справа от текущего местоположения в строке, не добавляя ее ксопоставьте значение, таким образом, сохранив его в выходных данных.

Обратите внимание, что \s соответствует различным пробельным символам, а не только обычным обычным пробелам.Кроме того, безопаснее использовать [[:upper:]] вместо [:upper:] - если вы планируете использовать шаблоны с другими механизмами регулярных выражений (например, PCRE, например).

...