2017-12-04 1 views
0

ich also nach dem ersten Raum mit zu extrahieren versuchengsub Verwendung zu entsprechenden Strings in R zu erhalten - regulärer Ausdruck

Spezies < -gsub ("* ([A-Za-z] +)" „\ 1“, x = Genus)

Dies funktioniert für die anderen Reihen fein, die zwei Worte, Zeile jedoch [9] „Eulamprus Tympanon marnieae“ hat 3 Worte und mein Code ist nur das letzte Wort Rückkehr in der Zeichenfolge "Marnieae". Wie kann ich die Wörter nach dem ersten Leerzeichen extrahieren, damit ich "tympanum marnieae" statt "marnieae" abrufen kann, aber die Antworten in einer Variablen namens> species

Gattung

[9] "Eulamprus Tympanon marnieae"

+0

Bitte posten Sie Ihre Eingabe, so dass wir sicher sein können, wir die richtige Antwort sind bieten. – CAustin

+0

gattungeneu <-gbsub ("([A-Za-z] +)", "\\ 1", x = Gattung), um das erste Wort in einer Zeichenfolge abzurufen. –

+0

Arten <-gsub (". * ([A-Za-z] +)", "\\ 1", x = Gattung), um das zweite Wort in der Zeichenfolge abzurufen. Für Zeile [9] hat es das dritte Wort in der Zeichenfolge abgerufen, aber nicht die zweite –

Antwort

0

Ihre ursprüngliche Muster hat nicht funktioniert, weil die Unter-Pattern [A-Za-z]+ keine Leerzeichen entspricht, und daher wird nur ein einziges Wort übereinstimmen .

können Sie das folgende Muster verwenden eine beliebige Anzahl von Wörtern entsprechen (außer 0) nach dem ersten, in doppelten Anführungszeichen:

"[A-Za-z]+ ([A-Za-z ]+)"https://regex101.com/r/p6ET3I/1

https://regex101.com/r/p6ET3I/2

Dies ist ein relativ einfach ist, aber unvollkommen, Lösung. Es wird auch nachstehende Leerzeichen oder nur ein oder mehrere Leerzeichen nach dem ersten Wort übereinstimmen, auch wenn ein zweites Wort nicht existiert. "Eulamprus " zum Beispiel wird das Muster erfolgreich übereinstimmen und 5 Leerzeichen zurückgeben. Sie sollten dieses Muster nur verwenden, wenn Sie darauf vertrauen, dass Ihre Daten ordnungsgemäß formatiert sind.

Eine zuverlässigere Ansatz wäre die folgende:

"[A-Za-z]+ ([A-Za-z]+(?: [A-Za-z]+)*)"

https://regex101.com/r/p6ET3I/3

Dieses Muster ein Wort erfassen wird (nach der ersten), durch eine beliebige Anzahl von Additions Worten gefolgt (einschließlich 0) , getrennt durch Leerzeichen.

Wie ich mich jedoch aus dem Biologieunterricht erinnere, bestehen Arten nur aus einem oder zwei Namen und werden niemals großgeschrieben. Das folgende Muster reflektiert dieses Format:

"[A-Za-z]+ ([a-z]+(?: [a-z]+)?)"

https://regex101.com/r/p6ET3I/4

+0

Vielen Dank, das ist eine brillant detaillierte Antwort und 1 hat dies sehr hilfreich :-) –

+0

Aber sicher erwiesen. Könnten Sie die Antwort als akzeptierte Lösung markieren? – CAustin

Verwandte Themen