2016-10-10 3 views
0

у меня есть:Удаление начало и конец строки

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

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

c("secondary school) 

Enrolment in и первый , фиксированные паттерны.

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

+0

'stringr :: str_replace (str, «Регистрация в (. +),. +", "\\ 1") ', вероятно, сделает трюк.Скобки определяют группировку, на которую можно ссылаться позже по порядку (т. Е. К набору «n» th скобок можно ссылаться на '\\ n'). Очевидно, что это не очень устойчивое регулярное выражение, но оно проходит ваш тестовый пример. –

+0

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

+0

Вы включили ',. +' После закрытой скобки? Прекрасно работает для меня –

ответ

3

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

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

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

1) GSUB Это заменяет префикс и суффикс с пустой строкой в ​​один присест:

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

2) суб Это делает то же, но в отдельных случаях sub выписки:

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

2а) к югу/подстрока Поскольку мы знаем длину префикса мы могли бы заменить один из 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"