2016-12-20 4 views
1

Ich habe ein Dataframe df mit einigen URLs. Es gibt Unterkategorien der Schrägstriche in den URLs ich mit stringr extrahieren möchten und str_extractFinden Muster in URL mit Stringr und Regex

Meine Daten sieht aus wie

Text   URL 
Hello  www.facebook.com/group1/bla/exy/1234 
Test   www.facebook.com/group2/fssas/eda/1234 
Text   www.facebook.com/group-sdja/sdsds/adeds/23234 
Texter  www.facebook.com/blablabla/sdksds/sdsad 

ich jetzt alles extrahieren möchten nach .com/und der nächste/

ich habe versucht, suburlpattern <- "^.com//{1,20}//$" und df$categories <- str_extract(df$URL, suburlpattern)

Aber ich nur mit NA in df $ Kategorien am Ende

Irgendeine Idee, was ich hier falsch mache? Ist es mein Regex-Code?

Jede Hilfe wird sehr geschätzt! Vielen Dank im Voraus.

+1

'^' in einem Regex-Muster bedeutet, dass es nur am Anfang der Zeichenfolge übereinstimmt. Da '.com' nicht am Anfang der URL steht, stimmt Ihr Muster nicht überein. Wahrscheinlich brauchst du das '^' nicht. – Amber

+0

Danke Amber, aber es gibt mir leider immer noch nur NAs ... Irgendeine andere Idee? – rkuebler

Antwort

1

dies alles zurückkehren wird zwischen dem ersten Satz von Vorwärts

library(stringr) 
str_match("www.facebook.com/blablabla/sdksds/sdsad", "^[^/]+/(.+?)/")[2] 

[1] "blablabla" 
+0

danke das funktioniert sehr gut – rkuebler

+0

Sie können alle '\\ /' durch '/' ersetzen, da der Schrägstrich kein spezielles Regex-Metazeichen ist. –

2

schlitzt Wenn Sie str_extract verwenden möchten, müssen Sie einen regulären Ausdruck, der den Wert, den Sie in das gesamte Spiel benötigen, und Sie werden eine Notwendigkeit (?<=[.]com/) Lookbehind:

(?<=[.]com/)[^/]+ 

Siehe regex demo.

Einzelheiten:

  • (?<=[.]com/) - der aktuelle Standort muss mit .com/ Teilzeichenfolge
  • [^/]+ vorangestellt werden - Spiele 1 oder mehrere andere Zeichen als /.

R Demo:

> URL = c("www.facebook.com/group1/bla/exy/1234", "www.facebook.com/group2/fssas/eda/1234","www.facebook.com/group-sdja/sdsds/adeds/23234", "www.facebook.com/blablabla/sdksds/sdsad") 
> df <- data.frame(URL) 
> library(stringr) 
> res <- str_extract(df$URL, "(?<=[.]com/)[^/]+") 
> res 
[1] "group1"  "group2"  "group-sdja" "blablabla" 
+0

danke für die tolle Lösung und Erklärung! – rkuebler

0

Dies funktioniert

library(stringr) 
data <- c("www.facebook.com/group1/bla/exy/1234", 
      "www.facebook.com/group2/fssas/eda/1234", 
      "www.facebook.com/group-sdja/sdsds/adeds/23234", 
      "www.facebook.com/blablabla/sdksds/sdsad") 

suburlpattern <- "/(.*?)/" 
categories <- str_extract(data, suburlpattern) 
str_sub(categories, start = 2, end = -2) 

Ergebnisse:

[1] "Gruppe1" "group2" "Gruppen sdja" "blablabla"

Erhalten Sie nur, was zwischen den ersten und zweiten Schrägstrichen liegt ... aber das scheint, was Sie wollen.