2016-06-05 5 views
2

ich folgende Datenrahmen haben:R regex Extrakt ähnliche Wörter, aber man hat Bindestrich

species size_description 
1   "some text Small some text" 
2   "some text small-med some text" 
3   "some text Med. some text" 
4   "some text medium some text" 
5   "some text med-large some text" 
6   "some text large some text" 

Ich möchte eine regex die Größe in der Größe Beschreibungsfeld die Captures schreiben, so dass es würde wie folgt aussehen:

species size_description     newSize        
1   "some text Small some text"   "Small" 
2   "some text small-med some text"  "small-med" 
3   "some text Med. some text"   "Med." 
4   "some text medium some text"  "medium" 
5   "some text med-large some text"  "med-large" 
6   "some text large some text"   "large" 

ich habe versucht, es so zu tun:

size_regex = paste(
       "[Ss]{1}mall", 
       "[Mm]{1}ed\\.*i*u*m*", 
       "[Mm]{1}ed\\.*i*u*m*-*\\s*[Ll]{1}arge",  #doesnt work 
       "[Ss]{1}mall-*\\s*[Mm]{1}ed\\.*i*u*m*",  #doesnt work 
       "[Ll]{1}arge", 
       sep = "|" 
       ) 

df$newSize = str_extract(df$size_description, age_regex) 

ABER, es diejenigen, die mit hy unterscheiden kann nicht Phens. Zum Beispiel, für Spezies 2 zeichnet es es als "klein" und nicht "klein-med" auf.

Wie kann ich eine Regex schreiben, die dies in R tun? Ich habe Vorliebe für das Stringr-Paket, aber alles wird reichen.

Beachten Sie den Grund, warum ich die Option für die vollständigen Wörter in meiner Regex lassen, ist, dass einige Beschreibungen das vollständige Wort verwenden. Zum Beispiel können einige "klein-mittel" sein, während andere nur "klein-med" sind.

+0

Größe das dritte Wort immer erwähnt? – rock321987

+0

nein, es kann überall in der Zeichenfolge sein –

+0

Was sind die möglichen 'Größe' Elemente, die Sie in Betracht ziehen? – rock321987

Antwort

1

Ich denke, diese Regex die Bedingungen genügen, die Sie

(\S*(?:[Ss]mall|[Ll]arge|[Mm]edium|Med[.])\S*) 

Regex Demo

+0

Ja, das sieht gut aus. Können Sie mir erklären, wie dieser Regex den Bindestrich aufgreift? Sag zum Beispiel, wenn ich eine separate Regex nur für "small-med" wollte, wie könnte ich das tun? –

+1

@OliverOliver eigentlich, was ich versuche zu finden ist das Wort 'Small',' Large', 'Medium' oder' Med.' und Kommissionierung jedes Wort, das kurz vor (_and after_) diese erwähnten Wörter ist und _not spaces_ – rock321987

+0

@OliverOliver für 'small-med', können Sie direkt verwenden, wie es ist – rock321987

Verwandte Themen