0

私は正規表現をあまり長く使用しておらず、正しい正規表現パターンを定義するのに苦労しています。このサイトや他の多くのサイトを検索しましたが、必要なものが見つかりません。

解析する必要があるファイルの部分文字列は次のとおりです。

    As of 10 AM on:
    9/7/2012         227,134 mmcf.
    9/9/2011         1,224,376 mmcf.
    9/10/2010        424 mmcf.

抽出する必要があるのは、ファイル内の行からの日付ではない数値です。上記の例の各行はファイル内の改行であり、日付が行の最初の単語になっています (ご想像のとおり)。日付に続く空白は、実際には 2 つのタブと 1 つのスペースです。値227,134のみを抽出する必要があり、その値を 1 から 999,999,999 まで取得できる必要があります。ご覧のとおり、カンマが値に含まれています。

どの値 (123,456; 123,224,376; および 424) にも一致するパターンを作成できましたが、各日付プロパティ (月、日、年) にも一致します。日付と空白を取得するパターンはありますが、その後の値を取得する方法がわかりません。

これが私が使用している現在のパターンです:

    ^(?:3[01]|[12][0-9]|[1-9])[/.-](?:1[0-2]|[1-9])[/.-][0-9]{4}         [,0-9]+\b

これは次のものと一致します。

    9/7/2012         227,134
    9/9/2011         1,224,376
    9/10/2010        424

パターンの一部を一致させ、パターンの残りの部分から除外する方法はありますか?

これに最適なアプローチは何ですか?

リストの最初の値 (この場合は227,134 ) を見つけることだけに関心があります。

よろしくお願いします。

4

3 に答える 3

2
[\d\,]+(?=\smmcf\.)

1 つ以上の数字またはコンマの後にスペースと「mmcf」が続きます。

于 2012-09-27T18:00:12.547 に答える
0

この正規表現はどうですか?

^\s*\d{0,2}/\d{0,2}/\d{0,4}\s+([\d,]+)\s*.*$

グループは必要な数です。

これは何ですか

  • ^行の開始
  • \s*空白(0回以上)

今、日付を取得します

  • \d{0,2}0〜2桁
  • /スラッシュ
  • \d{0,2}0〜2桁
  • /スラッシュ
  • \d{0,2}0〜4桁

いくつかの空白

  • \s+空白(1回以上)

欲しい数

  • ([\d,]+)数字とカンマをキャプチャする

そして残りの行

  • \s*空白(0回以上)
  • .*これ以上の桁
  • $行の終わり
于 2012-09-27T17:57:31.540 に答える
0

最も簡単なのは、行の空白の後の数字を一致させることです。日付を一致させる必要さえありません。

^\s*\S+\s+([\d,]+)

グループには、カンマがまだ含まれている番号が含まれます。

于 2012-09-27T17:59:26.247 に答える