Удаление начала и конца строки

#r

#r

Вопрос:

У меня есть:

 c("Enrolment in secondary school, private school")
  

и я хотел бы иметь

 c("secondary school)
  

Enrolment in и первые , — это фиксированные шаблоны.

Я совсем не знаком с регулярными выражениями. Может кто-нибудь помочь?

Комментарии:

1. stringr::str_replace(str, "Enrolment in (. ),. ", "\1") вероятно, это поможет. Скобки определяют группировку, на которую можно ссылаться позже по порядку ( n т.е. Можно ссылаться на набор скобок \n ). Очевидно, что это не очень устойчивое регулярное выражение, но оно проходит ваш тестовый пример.

2. Спасибо, Ахил, но это выражение удаляет только часть «Зачисление в», но не «,» и все после нее.

3. Вы включили ,. после закрытой скобки? Для меня работает нормально

Ответ №1:

Вот несколько альтернатив. Они не используют никаких пакетов, и все они работают, если x это одна строка или вектор строк (за исключением (3), который предназначен только для одной строки — (3a) является векторной версией (3)).

Они используют этот ввод:

 x <- "Enrolment in secondary school, private school"
  

1) gsub Это заменяет префикс и суффикс на пустую строку за один раз:

 gsub("Enrolment in |,.*", "", x)
## [1] "secondary school"
  

2) sub Это делает то же самое, но в отдельных sub вызовах:

 sub(",.*", "", sub("Enrolment in ", "", x))
## [1] "secondary school"
  

2a) sub / substring Поскольку мы знаем длину префикса, мы могли бы заменить один из sub вызовов на substring :

 sub(",.*", "", substring(x, 14))
## [1] "secondary school"
  

3) strsplit Хотя обычно это решение не используется, можно использовать strsplit, как показано:

 strsplit(x, "Enrolment in |,.*")[[1]][2]
## [1] "secondary school"
  

3a) Для обобщения (3) на вектор строк:

 sapply(strsplit(x, "Enrolment in |,.*"), "[", 2)
## [1] "secondary school"
  

4) read.table Это заменяет префикс запятой, а затем считывает его как разделенные запятыми поля read.table , выбирая второй столбец:

 read.table(text = sub("Enrolment in ", ",", x), sep = ",", as.is = TRUE)[[2]]
## [1] "secondary school"
  

Ответ №2:

Например:

 library(stringr)

str = c("Enrolment in secondary school, private school")

str_extract(str, "(?<=Enrolment in )([^,] )")
#> [1] "secondary school"
  

Вы также можете сделать это с помощью:

  1. Удаление «Зачисление в»
  2. Разбиение на запятую
  3. Берем первую ее часть

Например:

 (remove_enrol <- gsub("Enrolment in ", "", str))
#> [1] "secondary school, private school"

(result = strsplit(remove_enrol, ",")[[1]][[1]])
#> [1] "secondary school"