2016-07-18 37 views
-6

私はサイズ記述カラムを持つ小売データセットを扱っています。私の仕事は、列をきれいにして文字列内の文字から数値のサイズを区切ることです。正規表現でそれを行う方法はありますか?私は、数値と2つの異なる列にある列に存在する他の文字列の両方を保存する必要があります。データに関するRの正規表現:列から文字と数字を抽出する

観察:靴、トップスとボトムス:

  • 列には3つの大きなカテゴリーのサイズが含まれています。
  • シューズ:セル内の数字は一般的にサイズであり、それ以外のものは別に保存されます。ユニークなケースは次のように見えます - EU 36(EUはヨーロッパサイズで変換が必要です)、UK 8(同様の変換が必要)、19 Wide、10 Kids、19(-25F)(このケースでは、セーブ-25F情報)。
  • トップウェア:ここのサイズは一般的にXXS、XS、S、M、L、XL、XXL、XXXLです。 Tall、股下などの別のストリングは別々に保管する必要があります。また、XXLのようなサイズも2XLとして表すことができます。
  • ボトムウェア:こちらは一般的にサイズは最初に発生します。それは32番またはXL字(トップウェアに似ています)でもかまいません。それに続く他の文字列がある場合は、別々に格納する必要があります。

ありがとう!

+0

あなたは、データの多くを示していただけますか? '正規表現'を使うにはパターンが必要であり、一行のテキストだけでは一貫したパターンを作るには不十分です。 – Abdou

+1

はい、少なくとも3行の入力を表示し、入力に対応する出力をどのように表示するかを示します。また、あなたが行った試みのコードも表示してください。 –

+0

また、データ行の順序に関係なく、 "F"、二重引用符、および度記号を認識する必要があるかどうかを指定する必要があります(自分自身でない場合)。 –

答えて

1

ここには、これらの複数のケースの正規表現があります。
これは例のために働きます。

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) 

正規表現の内訳:

\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

こんにちは、@ LukStromsありがとう、これは役立つveyです。この正規表現を理解する方法を詳しく教えてください。私は申し訳ありませんが、私はこれらのテキスト解析を使用するのはかなり新しいです。 – gagandeep91

+1

答えに使用されている正規表現に詳細を追加しました。 [正規表現](https://en.wikipedia.org/wiki/Regular_expression)は、インターネットが存在する前からすでに存在しています。したがって、ドキュメントや[オンラインテスター](https://regex101.com/)を見つけることは簡単です。 – LukStorms

関連する問題