2016-07-18 8 views
-6

Ich arbeite mit einem Einzelhandelsdatensatz, der eine Größenbeschreibungsspalte hat. Meine Aufgabe ist es, die Spalte zu säubern und die numerische Größe von den Zeichen in der Zeichenfolge zu trennen. Gibt es eine Möglichkeit, dies über reguläre Ausdrücke zu tun? Ich muss die Nummer und jede andere in der Spalte vorhandene Zeichenfolge in zwei verschiedenen Spalten speichern.Regulärer Ausdruck in R: extrahiere Zeichen und Zahlen aus einer Spalte

Beobachtungen über die Daten:

  • Die Spalte enthält Größen von drei Kategorien: Schuhe, TOPS und unten zu tragen.
  • Schuhe: Die Nummer in der Zelle ist in der Regel die Größe und alles andere als das getrennt gespeichert werden soll. Die einzigartigen Fälle sehen aus wie - EU 36 (EU sagt seine europäische Größe, also Konvertierung ist erforderlich), UK 8 (ähnliche Konvertierung erforderlich), 19 Wide, 10 Kids, 19 (-25F) (in diesem Fall muss ich wirklich nicht speichern -25F info).
  • Topwear: Die Größen hier sind in der Regel XXS, XS, S, M, L, XL, XXL, XXXL. Jede andere Saite wie Tall, Inseam usw. muss separat gelagert werden. Auch eine Größe wie XXL kann auch als 2XL dargestellt werden.
  • Bottomwear: Größe tritt hier im Allgemeinen am Anfang auf. Es kann eine Zahl sein - 32 oder ein Zeichen - XL (ähnlich wie Topwear). Wenn eine andere Zeichenfolge folgt, sollte diese separat gespeichert werden.

Vielen Dank!

+0

Können Sie bitte mehr von den Daten zeigen? Die Verwendung von 'regulärem Ausdruck' erfordert ein Muster und nur eine Textzeile reicht nicht aus, um ein konsistentes Muster zu erzeugen. – Abdou

+1

Ja, zeigen Sie mindestens drei Zeilen der Eingabe an und zeigen Sie auch, wie die Ausgabe, die der Eingabe entspricht, aussehen sollte. Zeigen Sie auch den Code für alle Versuche, die Sie vorgenommen haben. –

+0

Sie müssen uns auch angeben (wenn nicht schon für Sie selbst), ob das "F", Zoll-Doppelzitat und Grad-Zeichen ohne Rücksicht auf die Reihenfolge in der Datenzeile erkannt werden müssen. –

Antwort

1

Hier ist eine Regex für diese Fälle.
Es funktioniert für die Beispiele.

details <- c("EU 36", "UK 8", "19 Wide", "10 Kids", "19(-25F)", "XXS", "XS is Extra Small", "S", "M", "L", "XL", "XXL", "XXXL", "2XL", "32") 

pattern = "\\b(?:(?:(?:2?X*(?:S|L))|M|(?:EU|UK) [0-9]+)|(?:[0-9]{2}(?: (?:Kids|Wide))?))\\b" 

matches <- regexpr(pattern, details) 

regmatches(details, matches) 

Aufteilung der Regex:

\b # Word boundary: a position between a word and non-word character 
     # (includes the start/end of the line). 
    (?:  # a non-capturing group 
    (?:  # ditto 
     (?: # ditto 
     2? # 0 or 1 "2" characters 
      X* # 0 or more "X" characters 
      (?:S|L) # "S" or an "L" character 
    ) 
     | # or 
     M # the "M" character 
     | # or 
     (?:EU|UK) [0-9]+ # "EU" or "UK", followed by a space and 1 or more digits 
     | # or 
     (?:[0-9]{2}(?: (?:Kids|Wide))? # 2 digits optionally followed by " Kids" or " Wide" 
    ) 
) 
\b # Word boundary 
+0

Hey vielen Dank @LukStroms, das ist sehr hilfreich. Kannst du bitte erläutern, wie man diesen regulären Ausdruck versteht? Es tut mir leid, aber ich bin ziemlich neu, um diese für die Texanalyse zu verwenden. – gagandeep91

+1

Hinzugefügt eine Ausarbeitung auf der Regex in der Antwort verwendet. [Reguläre Ausdrücke] (https://en.wikipedia.org/wiki/Regular_expression) existieren bereits seit der Existenz des Internets. So ist es einfach, eine Dokumentation oder sogar einen [Online-Tester] (https://regex101.com/) zu finden. – LukStorms

Verwandte Themen