2016-12-19 27 views
0

私はRegexExtractを使用してテキストから数値を抽出しています。私は以下の正規表現[0-9]+(\.[0-9][0-9]?)?を以下のリンクから使用しましたが、小数点以下の2つの値しか抽出していないことがわかりました。私はそれの前にも番号が必要です。それがなぜ機能していないのか分かりません。私はそれのさまざまなバリエーションも試しました。Regex - 文字列から数値(2小数点以下)を抽出します。

Simple regular expression for a decimal with a precision of 2

Iから引いていたテキストは常に同じ長さではなく、に沿って約100文字です。テキストでは、私は数値をプルする必要のある以下があるのみ(X.XX):はGmax = 2.3428

ThisWorkbook.Worksheets(Warn.MachBox.Value & "_C1").Range("B" & Duncan2 + 1).Value = RegexExtract(ThisWorkbook.Worksheets(Warn.MachBox.Value & "_C1").Range("C" & Duncan2 + 1).Value, "Gmax = [0-9]+(\.[0-9][0-9]?)?")

私はそれを持って、現在の方法と私が試したさまざまなバリエーション小数点より前の値を除いて0.34しか返しません。私は2.34が必要です。

ご意見をいただければ幸いです。ありがとう!

編集:RegexExtract関数の情報を追加するのを忘れました。この正規表現は、負と正の数のためである How to extract text within a string of text

答えて

4

私が使用します。

(\d+)(?:\.(\d{1,2}))? 

説明:これはマッチングの一部としてあなたにドットを与えないことを

(   # First matching group 
\d   # A digit (shorthand for [0-9]) 
    +  # Any number of times 
) 
(?:   # A non-matching group 
    \.  # A literal dot 
    (  # Second matching group 
    \d  # A digit 
     {1,2} # 1 or 2 times (shorthand for \d\d? or [0-9][0-9]?) 
    ) 
)?   # The decimal part is optional 

注意これはおそらく後処理で簡単になるでしょう。一致していない場合は、一致しないグループを削除して、一致する2番目のグループの中にそのドットを配置することができます。

これはあなたが望む結果が得られていない場合、それはあなたが正規表現ライブラリを呼び出す方法と、最も可能性の高い問題です。

+0

私は(\ d +)(?:\。(\ d {1,2}))を試しましたか?私はあなたの他の提案を試みたが、それを正しく(\ d +)(\。\ d {1,2})修正したかどうかはわからなかったか?それは2、0.34を返しました。 – jmeddy

+0

@jmeddyはい、それは正しいと私が書いたものを確認します。あなたはドットを一致させるかどうかを選択できます。 – Keelan

+0

ありがとう、カミル。 2と34の間にコンマとスペースがある理由は何ですか?助けてくれてありがとう、私はregexを使うのが初めてです。 – jmeddy

0
^-?\d+(\.\d{1,2})?$ 

:これは、以下のリンクで発見されました。この正規表現をテキストにマッチさせたい場合は、^ $を削除する必要があります。

{1,2}オプションは、小数点以下桁数の精度です。あなたの問題のためにこのオプションを使用することができます:{2}

+0

こんにちはMattasse、応答に感謝します。これは私のために同じ結果を提供し、小数点の前に値を含めません。それはうまくいくようですが、いくつかはそうではないようです。多分私はここで間違っている他のものです... – jmeddy

関連する問題