6

私はこれを持っています:

  • 110121 ナチュラル 95 1570,40
  • 110121 ナチュラル 95 1570,40*
  • 41,110 1 x 38,20 CZK)[A] *
  • ' 31,831 261,791 1308,61)
  • >01572 プラボ SO 17,00
  • 1,000 ks x 17,00
  • 1570,40

この出力のすべての行がリストに保存され、番号 1570,40 を取得したい

私の正規表現は、このタイプの形式では次のようになります

    "([1-9][0-9]*[\\.|,][0-9]{2})[^\\.\\d](.*)"
    "^([1-9][0-9]*[\\.|,][0-9]{2})$"

最後の行に 1570,40 が見つかった場合 (2 番目の正規表現によって)、1570,40 (最後に 1570,40* のある行から) が見つかりましたが、最初の行が見つからないという問題があります..どこか知っていますか?問題はありますか?

4

3 に答える 3

1

あなたのニーズをよく理解しているかどうかはわかりませんが、次のような単語の境界を使用できると思います。

\b([1-9]\d*[.,]\d{2})\b

日付を一致させないために、次を使用できます。

(?:^|[^.,\d])(\d+[,.]\d\d)(?:[^.,\d]|$)

説明:

The regular expression:

(?-imsx:(?:^|[^.,\d])(\d+[,.]\d\d)(?:[^.,\d]|$))

matches as follows:

NODE                     EXPLANATION
----------------------------------------------------------------------
(?-imsx:                 group, but do not capture (case-sensitive)
                         (with ^ and $ matching normally) (with . not
                         matching \n) (matching whitespace and #
                         normally):
----------------------------------------------------------------------
  (?:                      group, but do not capture:
----------------------------------------------------------------------
    ^                        the beginning of the string
----------------------------------------------------------------------
   |                        OR
----------------------------------------------------------------------
    [^.,\d]                  any character except: '.', ',', digits
                             (0-9)
----------------------------------------------------------------------
  )                        end of grouping
----------------------------------------------------------------------
  (                        group and capture to \1:
----------------------------------------------------------------------
    \d+                      digits (0-9) (1 or more times (matching
                             the most amount possible))
----------------------------------------------------------------------
    [,.]                     any character of: ',', '.'
----------------------------------------------------------------------
    \d                       digits (0-9)
----------------------------------------------------------------------
    \d                       digits (0-9)
----------------------------------------------------------------------
  )                        end of \1
----------------------------------------------------------------------
  (?:                      group, but do not capture:
----------------------------------------------------------------------
    [^.,\d]                  any character except: '.', ',', digits
                             (0-9)
----------------------------------------------------------------------
   |                        OR
----------------------------------------------------------------------
    $                        before an optional \n, and the end of
                             the string
----------------------------------------------------------------------
  )                        end of grouping
----------------------------------------------------------------------
)                        end of grouping
----------------------------------------------------------------------
于 2013-04-23T11:56:15.977 に答える
0

"([1-9][0-9]*[\\.|,][0-9]{2})[^\\.\\d](.*)"has は、数値の[^\\.\\d]直後に非数字、非ドット記号が 1 つあることを意味します。2 行目には*、それに一致するものがあります。最初の行は行末に番号があるため、一致するものはありません。すべての数字をキャッチする正規表現が1つだけ必要だと思います: [^.\\d]*([1-9][0-9]*[.,][0-9]{2})[^.\\d]*. また、文字列全体を照合するのではなく、文字列内の部分文字列を見つけるためfindに代わりに使用する必要があります。matchまた、行にそのような数字が 2 つ含まれている場合に備えて、すべての一致を見つけることには意味があるかもしれません。

また、 または のいずれ[0-9]かを使用します\d。現時点では混乱しています。意味は同じですが、見た目が異なります。

于 2013-04-23T11:56:35.077 に答える