2017-02-09 17 views
2

私は本当に近いですが、私は正規表現の専門家ではありません。ここに私の入力文字列があります。コロンの後の10進数だけを一致させる正規表現

DCIN : 11.896V 
5V : 4.988V 
Vcom : 0.008V 
5VStby: 4.992V 
48V : 0.042V 
48I : 0mA 

コロンの後の数値のみを入力します。これは私がこれまで持っているもの

/[^\D]+\.?[^\D]+/ 

であり、それはまた2つの48のインスタンスをつかんだし、それが0

+1

のみ小数点以下を行うだろうか?最初の行は '896'ですか?それはその数字の小数部です。 –

+0

'Regex.Matches(s、@":\ s *(\ d * \?\ d +) ")。あなたが '11.896'、' 4.988'などを取得する必要がある場合 –

答えて

2

あなたの正規表現を取得していないことは、それがない理由つまり、最後に少なくとも2桁が必要です最後の行でゼロにマッチします。コロンの後ろにマッチするパターンに制限はありません。

使用

var res = Regex.Matches(s, @":\s*(\d*\.?\d+)") 
    .Cast<Match>() 
    .Select(m=>m.Groups[1].Valu‌​e) 
    .ToList(); 

regex demo

詳細参照してください:

  • :\s* - コロンと0個以上の空白
  • (\d*\.?\d+) - 値を保持しているキャプチャグループ1にあなたを必要:
    • - ゼロ以上の数字
    • \.? - 任意ドット
    • \d+ - 一つ以上の桁。

enter image description here

+0

ああそう近くにコロンや空白を入れたくない –

+0

Nevermind、私はRegExテスターではなく、Cで試してみた治療をします! –

+0

ここでは、* capture *を使用するのは、マッチの* parts *にアクセスできるようにすることです。重複したマッチが必要な場合には、ここでのケースではなく、ルックアバウトを使用することが理にかなっています。 "Regex.Matches(s、@"(?<=:\ s *)\ d * \?\ d + ")を使用することもできます。 ).ToList(); 'しかし、上記の解決策はより自然な方法で行います(.NETはlookbehindの中で' * 'と' + 'を使用できるようにする数少ない正規表現エンジンの1つです)。 –

1

私はコロンの後にthis

^[^:]*:\s*(\d+(?:\.\d*)?) 
関連する問題