2017-01-19 11 views
3

Ich habe ein Textdokument und ich versuche, den Text zwischen den Wörtern "Zusammenfassung" und "Schlüsselwörter" (in R) zu bekommen. Dies ist der Code Ich verwende:Regex: Text zwischen zwei Wörtern erhalten (in R)

gsub(".*abstract\\s*|keywords.*", "\\1", string) 

Dies ist jedoch nicht, weil irgendwo anders das Wort im Text nicht funktioniert „abstrakt“ aufgetreten, so habe ich es nicht gierig wie folgt aus (hinzugefügt vor? abstract)

gsub(".*?abstract\\s*|keywords.*", "\\1", string) 

aber aus irgendeinem Grunde dauert es jetzt den Text zwischen „abstrakt“ und „keywords“ (das ist, was ich will), sondern auch den Text aus dem zweiten „abstrakt“ erscheinen im Text beginnen, den ganzen Weg bis zum Ende. Irgendwelche Ideen?

+0

Mögliche Duplikat [Auszug Informationen innerhalb aller Klammern in R] (http://stackoverflow.com/questions/8613237/extract-info-inside-all-parenthesis-in-r) – Barker

Antwort

1

es sieht nicht aus wie Sie etwas in Ihrem Suchbegriff erfassen sind, müssen Sie nur einige () s‘in es tatsächlich etwas greifen, so \\1 wird Ihr Ziel zurück:

words <- c("these are some different abstract words that might be between keywords or they might just be bounded by abstract ideas") 
gsub(".* abstract (.*) keywords.*", "\\1", words) 
[1] "words that might be between" 
+0

Hey, danke für die schnelle Antwort! Um ehrlich zu sein, ich bin nicht gut in Regex, ich habe den Befehl gefunden, indem ich ihn auf Google gesucht habe. Noch eine Frage, ich habe den exakt gleichen Befehl verwendet, um Text zwischen "Abstrakt" und "Einführung" zu bekommen, und aus irgendeinem Grund funktioniert das auch. Weißt du, warum? Hier ist der Code: gsub (". * Zusammenfassung \\ s * | Einführung. *", "", Wörter) – vdvaxel

+1

zuerst hier ist mein Lieblings-Spickzettel: https://www.cheatography.com/davechild/cheat-sheets/Regular-Ausdrücke/(Ich benutze das Ding viel, weil Regex ist schwer) – Nate

+0

Ja, ich weiß, aber meine Frage war, warum dieses Stück Code ich veröffentlicht funktioniert (glaube es oder nicht, aber es funktioniert tatsächlich für die Einführung Teil und nicht für die Keywords Teil, weshalb ich verwirrt bin). Danke noch einmal! – vdvaxel

1

ich denke, das sollte geben Sie, was Sie suchen:

regmatches(string, gregexpr("(?<=abstract).*(?=keywords)", string, perl = TRUE)) 

Was es tut:

  • (?<=abstract) verwenden, um die „look ahead“ Fähigkeiten Dinge nach dem Wort „abstrakt“
  • .* Spiel eine beliebige Anzahl von Keywords
  • (?=keywords) verwenden den „Blick hinter“ zu finden Dinge vor dem Wort „keywords“ finden
  • gregexpr sucht nach dem angegebenen regulären Ausdruck in string
  • perl = TRUE ermöglicht die „nach vorne schauen“ und „Blick hinter“ Funktionalität
  • regmatches mit dem regulären Ausdruck des passenden Stück der Schnur zieht.
Verwandte Themen