2017-05-05 10 views
-2

Regexを使って解析したいという結果が得られました。 txtファイルの各行には、100までの数量を含む2つのエントリーが続き、長さとスペースが異なる項目名が続きます。Regexを使って複数の項目を1行に区切る

例:

7 BALLS OF STRING 13 CARDBOARD BOXES 
14 ROCKS 12 PENCILS 

私はグループ1の量と第一のエントリにマッチしたいと思いますし、それを持つ第二のエントリが2

+1

使用しているどのような言語やツール?どのようにこれを解決しようとしましたか? –

+0

試した試行例をいくつか追加してください。あなたがいったんやったらコミュニティはあなたを助けることができるはずです。 – ThatChris

答えて

0

あなたは次の正規表現を使用することができ、グループ内の量ですパターンやファイルの読み取り中にそれを使用し、1行あたり:https://regex101.com/r/18dege/1

:ここ

^(\d*\s[A-Z\s]*)\s(\d*\s[A-Z\s]*)$ 

が実際の例であります

ここではいくつかの詳細:

  • ^は([0-9]*に等しい)文字列の先頭、$それ
  • \d*試合の終わりには、任意の数(0以上)貪欲な数字のと一致して
  • \sは空白文字と一致します(例:等タブ、スペース、)
  • [A-Z\s]*マッチ大文字の任意の数(0以上)と空白貪欲
  • ()一致するグループを作成する(文字列の一部を抽出する)

以下のコメントによれば、大文字の後に小文字を付けることができます。一致させるべきではありません。このための例は次のようになります。

7 BALLS OF STRING 13 CARDBOARD BOXES 
14 ROCKS 12 PENCILS 
18 TABLES 3 BLANKETS sewn with patches 

このパターンに一致するには、次の正規表現を使用することができます:上記のパターンへのアップデートとして

^(\d*\s[A-Z\s]*?)[a-z\s]*\s(\d*\s[A-Z\s]*?)[a-z\s]*$ 

を、私は次のように追加しました:

(ないグループ内)の文の間
  • [a-z\s]*と第二文の後、小文字の文字列に一致するように
  • (\d*\s[A-Z\s]*?)私はマッチを非貪欲にするために、疑問符?を追加しました。これにより、大文字と小文字の間の空白を一致するグループに追加できなくなります。パターンの最後に文字列の末尾に$がなければなりません。そうでなければ、第2のグループは十分な文字と一致しません。ここで

ライブの例です:https://regex101.com/r/18dege/2

+0

素晴らしい。これはうまくいった。ありがとうございました。 – ryang

+0

Hey、 上記のデータは優れていましたが、このデータセットには例外がいくつか見つかりました。 上記に加えて、私は1つの行に1つのエントリだけでなくメモを持つエントリも持っています。私が欲しいデータはすべて、すべてのキャップに入っています。私が必要としないメモです。どんな助けでも大歓迎です。 STRING 13枚のダンボール 14 ROCKS 12铅笔 18 TABLESだからパッチ – ryang

+0

と縫製 3毛布 7ボール、小文字を大文字の後に常にあると一致すべきではありませんか? –

関連する問題