У меня проблема с регулярным выражением и 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"
Я использую by using strsplit
со следующим регулярным выражением, которое на основе моего небольшого ноу-хау должно рассуждать как "выбрать ТОЛЬКО символ двоеточия, за которым следует пробел и которому предшествуют ТОЛЬКО буквы".
Я попытался сделать регулярное выражение не жадным с помощью символа ?
, но явно что-то упускаю, и результат не работает должным образом, потому что он также включает me:
в операцию разделения.
Я думаю, что важно иметь нежадный оператор, потому что строка здесь просто пример, у меня, конечно, не всегда есть слово Mario
.
strsplit(x, "(?<=[[:alpha:]]):(?= )", perl = TRUE)
Спасибо в andvance!
Mario:
является первым, а не вторым двоеточием, за которым следует пробел и предшествует буква. Пожалуйста, будьте более точны в формулировке ваших требований. - person Cary Swoveland   schedule 09.05.2020strsplit(x, '\\d.*?:.*?:\\K', perl = TRUE)
- person rawr   schedule 09.05.2020\\d
он будет разделяться после каждых двух двоеточий. Я не знаю достаточно регулярных выражений, чтобы исправить это - person rawr   schedule 09.05.2020a:b:c: d
иa: b:c: d
вы хотите разделить двоеточие междуb
иc
. Правильный? Если да, то какова цель выделенного курсивом предложения в вашем вопросе? - person Cary Swoveland   schedule 09.05.2020str_split
@akrun, вы увидите, что он/она соответствует двоеточию, которому предшествует буква ((?<=[[:alpha:]])
), а затем пробел ((?= )
). Мы оба поняли, что вас интересует только разделение на двоеточие, которому предшествует буква, а за ним следует пробел. Я предлагаю вам убрать выделенный курсивом пункт. - person Cary Swoveland   schedule 09.05.2020