2017-07-17 3 views
0

Ich möchte substring (Beschreibung Details) aus den folgenden Zeichenfolgen extrahieren:Extrahierung R

string1 <- @{self=https://somesite.atlassian.net/rest/api/2/status/1; description=The issue is open and ready for the assignee to start work on it.; iconUrl=https://somesite.atlassian.net/images/icons/statuses/open.png; name=Open; id=1; statusCategory=} 
string2 <- @{self=https://somesite.atlassian.net/rest/api/2/status/10203; description=; iconUrl=https://somesite.atlassian.net/images/icons/statuses/generic.png; name=Full Curation; id=10203; statusCategory=} 

Ich versuche, die folgende

ExtractedSubString1 = "The issue is open and ready for the assignee to start work on it." 
ExtractedSubString2 = "" 

ich dieses versucht zu bekommen:

library(stringr)  
ExtractedSubString1 <- substr(string1, str_locate(string1, "description=")+12, str_locate(string1, "; iconUrl")-1) 
ExtractedSubString2 <- substr(string2, str_locate(string2, "description=")+12, str_locate(string2, "; iconUrl")-1) 

Auf der Suche nach einem besseren Weg, dies zu erreichen.

+0

"Besser" in welchem ​​Sinne? – MrFlick

+0

Wie alternativer Code ... – RanonKahn

Antwort

2

Mit nur Basis R sub und zurück verweisen, könnten Sie

sub(".*description=(.*?);.*", "\\1", c(string1, string2)) 
[1] "The issue is open and ready for the assignee to start work on it." "" 

The ".*" Spiel jede Menge von Zeichen tun, "description=" ist ein wörtliches Spiel, ".*?" Matches jeden Satz von Zeichen, aber die ? zwingt einen faulen passen Sie eher als ein gieriges Match. ";" ist ein Literal, und die "()" erfassen den Unterausdruck, der faul abgestimmt ist. Die Rückreferenz "\\1" gibt den in den Klammern erfassten Unterausdruck zurück.

Mit der Basis R-Funktionen regexec und regmatches kommt man der Methode im OP etwas näher. sapply mit "[" wird dann verwendet, um das gewünschte Ergebnis zu extrahieren.

sapply(regmatches(c(string1, string2), 
        regexec(".*description=(.*?);.*", c(string1, string2))), 
     "[", 2) 
[1] "The issue is open and ready for the assignee to start work on it." "" 
+0

Vielen Dank für die Vereinfachung der Aufgabe und eine detaillierte Erklärung. – RanonKahn

1

Sie könnten versuchen:

test.1 <- gsub("description=", "", strsplit(string1, "; ")[[1]][2]) 

test.2 <- gsub("description=", "", strsplit(string2, "; ")[[1]][2]) 

Dieses einfach die Zeichenfolge auf ; teilt, die in jede Saite teilt bis 6 Elemente die eckigen Klammern wählen Sie das zweite Element und die gsub ersetzt den description= nichts zu entfernen es.

+0

Danke, dass Sie einen nützlichen alternativen Ansatz vorgeschlagen haben. Dies ist sehr praktisch, wenn Sie Strings von der json-Ausgabe bearbeiten. – RanonKahn

Verwandte Themen