2012-01-24 44 views
1

私はregexには全く新しく、私の頭を完全に包むことはできません。文字列からコンマで区切った数字を抽出する方法

私は2つの正規表現を書こうとしています。もし可能であれば教えてください。どちらもVB.net構文に基づいています。

正規表現1: 私は反対テストしていた文字列 - ディスク上 サイズ:25754900936バイト

それは先頭のスペースの一握りを持っていますが、テキストは常に同じです。私はちょうど番号(25,754,900,936)を抽出しようとしています。

私はいくつかの正規表現を試しましたが、すべてを1行で取得することはできません。コンマは私を混乱させ、複数のマッチを返す(例えば、\ d + \ W +はコンマで区切られた数字のセットごとに1つずつ、4つのマッチを与える)。

私がしたことは[0-9/、] *しかし、それは私に25の空のマッチと1つのマッチ(マッチ19)を与えます。マッチ1でマッチする必要があります。

Doable?文字列からこのような数字を抽出できる正規表現を見ると、本当に役に立ちます。

正規表現2:
同じアイデアだが、今やマルチライン。

私は反対テストしてる文字列 - 私はその最後の行(25705262230)にJUST総バイト数を必要とする

  0 File(s)    0 bytes 
      1 File(s)   11,546 bytes 
      1 File(s)  259,584 bytes 
      3 File(s)   5,682 bytes 
     17218 File(s) 25,705,262,230 bytes 

。これを複数行の検索で行うことは可能ですか?同じ取引 - テキストは常に同じです。ちょうど番号を抽出するためにあなたの最初の正規表現については

答えて

2

、これを試してみてください。

(\d+,?)+ 

それは、必要に応じて1つを発生コンマ(,?)に続いて1桁以上(0-9)のグループを、一致しますそれ以上の時間。あなたの複数行の文字列の場合

あなたは文字列は常に「バイト」で終わるだろうことがわかっている場合、この試してください: '行はで終わらなければなりませんが、これは再び、最初の正規表現に似一致します

(\d+,?)+(?=\s*bytes$) 

$のように「bytes」は行の終わりを示します。 、番号を抽出するための

'Regex is your regular expression object containing the second regex 
regex.Match([your string]).Value 
+0

ジェームズ - 両方とも確かに動作しましたが、私は実際にこれを使用していません。ネット - 私は正規表現を行うことができますサードパーティのアプリケーションを使用しています。残念ながら、最初のキャプチャ、最初のグループでしか動作しません。その位置にそれを取得するには、2番目の正規表現上の任意の方法?今のところ、最初のグループの最初のキャプチャではバイトという単語が残っていますが、そうでなければ完璧です。 – Pat

+0

@Patああ私は心配していない。文字列の最後(キャプチャしたくない 'バイト')が含まれないように、先読みを追加する必要があります。私は上記の2番目の正規表現を修正しました。それが動作すれば私に教えてください - 単純に 'regex.Match(あなたの文字列)を使って、マッチした値( 'バイト'なし)を抽出しました。値' –

+0

パーフェクト - ありがとう! – Pat

0

のような正規表現を使用します:

/Size on disk: ((?:\d+,?)+)/ 

し、最初のキャプチャグループを抽出その後、キャプチャ値を抽出する必要があります。JavaScriptでは:...まあ、OK、それらの1つ以上 を見つける - 正規表現(内側から)言う

var s = "Size on disk: 25,754,900,936 bytes"; 
var bytes = s.match(/Size on disk: ((?:\d+,?)+)/)[1]; 
// "25,754,900,936" 

こと

  • \d - 桁の文字
    • +を探します
  • , - その後にリテラルカンマ
    • ? - ...まあ、多分;今、そのすべてを取得し、我々は
      • +を保存する必要はありませんグループとして扱い - - そのグループが起こることを許可するあなたがそれらの
    • (?:…)のものを見つけることができない場合、それはOKです回
    • 、任意の数の
  • (…)から
  • そうそう、およびテキストを見つけることができる。このすべての前にその権利を確保することのALLの結果をキャプチャし、私のためにそれを保存"Size on disk: "

複数行では、正規表現を入力の最後に固定します。ここでも、ここでは、JavaScriptでの例です:

var re = /((?:\d+,?)+) bytes$/m; 
var total = multiline.match(re)[1]; 

あなたがここにアクションでそれを見ることができます。http://jsfiddle.net/uFfsc/1/

それは入力の最後に.NETであなたの正規表現を固定する方法を学習するのはあなた次第です。

+0

Phrogz - 説明に感謝します。上のJamesの正規表現はうまくいきました。残念ながら(私のせいでそれは言及しません)、正規表現を受け入れるサードパーティーのアプリを使っています。私はJavaScriptなどを追加することができるプログラミング言語ではありませんが、あなたの説明は素晴らしく、正規表現が何をしているかを少し良く理解する助けになりました。 – Pat

+0

ノンキャプチャ括弧がうまく追加されているので、後方参照は作成されません:) –

+0

@Pat援助してくれてうれしいです。 – Phrogz

関連する問題