2016-10-10 14 views
0

ich habe:Entfernen Anfang und Ende eines Strings

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

und ich würde

c("secondary school) 

Enrolment in und die erste , sind feste Muster haben möchten.

Ich bin überhaupt nicht vertraut mit regulären Ausdrücken. Kann jemand aushelfen?

+0

'stringr :: str_replace (str, "Anmeldung in (. +),. +", "\\ 1") 'wird wahrscheinlich den Trick machen.Klammern definieren eine Gruppierung, auf die später in der Reihenfolge Bezug genommen werden kann (d. H. Der 'n' te Satz von Klammern kann mit '\\ n' referenziert werden). Offensichtlich ist es keine sehr belastbare Regex, aber es besteht Ihren Testfall. –

+0

Dank Akhil, aber dieser Ausdruck entfernt nur die "Registrierung in" Teil, aber nicht die "," und alles danach. – cimentadaj

+0

Haben Sie die ',. +' Nach der geschlossenen Klammer eingeschlossen? Funktioniert gut für mich –

Antwort

3

Hier sind einige Alternativen. Sie verwenden keine Pakete und sie funktionieren alle, wenn x eine einzelne Zeichenfolge oder ein Vektor von Zeichenfolgen ist (außer (3), die nur für eine einzelne Zeichenfolge ist - (3a) ist die Vektorversion von (3)).

Sie nutzen diese Eingabe:

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

1) gsub Dieses in einem Rutsch das Präfix und das Suffix mit dem leeren String ersetzt:

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

2) Unter Dies tut das gleiche, aber in separaten sub Aufrufe:

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

2a) sub/Teilzeichenfolge Da wir die Länge des Präfix wissen wir eines der sub Anrufe mit substring ersetzen könnte:

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

3) strsplit Obwohl man normalerweise nicht diese Lösung ein verwenden würde strsplit verwenden könnte, wie gezeigt:

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

3a) bis (3) auf einen Vektor von Strings zu verallgemeinern:

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

4) read.table Dies ersetzt das Präfix mit einem Komma und dann liest sie als kommagetrennte Felder read.table die zweite Spalte Abgreifen:

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

Zum Beispiel:

library(stringr) 

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

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

könnten Sie tun es auch:

  1. "Enrollment in"
  2. Splitting auf einem
  3. den ersten Teil davon nehmen
  4. Komma Entfernen

Zum Beispiel:

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

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