Разделить строку с помощью не жадного регулярного выражения через strsplit - PullRequest
3 голосов
/ 09 мая 2020

У меня проблема с регулярным выражением и strsplit. Я хотел бы разбить следующую строку x на основе второго : символа

x <- "26/11/19, 22:16 - Super Mario: It's a me: Super Mario!, but also : the princess"

и получить что-то вроде этого

"26/11/19, 22:16 - Super Mario"
" It's a me: Super Mario!, but also : the princess"

Я использую, используя strsplit со следующим регулярным выражением, которое, исходя из моего небольшого ноу-хау, должно рассуждать вроде "выберите ТОЛЬКО символ двоеточия, за которым следует пробел и которому предшествуют ТОЛЬКО буквы" .

Я пытался сделайте регулярное выражение не жадным с символом ?, но я явно что-то упускаю, и результат не работает должным образом, потому что он также включает me: в операцию разделения.

Это важно, я думаю, что не жадный оператор, потому что строка здесь всего лишь пример. У меня, конечно, не всегда есть слово Mario.

strsplit(x, "(?<=[[:alpha:]]):(?= )", perl = TRUE)

Спасибо andvance!

1 Ответ

3 голосов
/ 09 мая 2020

Мы можем заменить первое вхождение ':' другим символом или просто скопировать его, а затем использовать strsplit

strsplit(sub("([[:alpha:]]):", "\\1::", x),
       "(?<=[[:alpha:]]):{2,}(?= )", perl = TRUE)[[1]]
#[1] "26/11/19, 22:16 - Super Mario"       
#[2] " It's a me: Super Mario!, but also : the princess"

или str_split

library(stringr)
str_split(x, "(?<=[[:alpha:]]):(?= )", n = 2)[[1]]
#[1] "26/11/19, 22:16 - Super Mario"   
#[2] " It's a me: Super Mario!, but also : the princess"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...