2017-04-04 1 views
1

私は重量と寸法を読み取っていますダッシュで区切られた値はシリアルポートから取得しました。ダッシュで区切られた文字列の負の値と正の値の正規表現

これは、着信データが今どのように見えるかです:

-15.0cm-47.8cm-83.1cm: 0.115 kg 

そして、これは、たとえば、これらの値の1が同様に否定することができ、時には、しかしそれ

@"(\d+\.\d+)" 

のための私のパターンです

--15.0cm-47.8cm--83.1cm: 0.115 kg. 

私の質問は、負の値と正の値を同時に取得する方法です。上記の文字列の出力は[ "-15.0", "47.8", "-83.1", "0.115"]です。

+0

待ちは例が負の値を持っている、またはそれがダッシュで値を区切るのか? – juharr

+0

例はダッシュで区切られています – TheNewBegining

+0

負の値をとると '--6.24cm - 5.5cm - 10cm:-25.0kg'のようになりますか? – juharr

答えて

1

あなたは(一致の値に加算すなわち、消費取得すること)もう一つの前に「ダッシュ」があることを確認するために後読みパターンを使用することがあります。

(?:(?<=-)-)?\d+\.\d+ 

--15.0cm-47.8cm--83.1cm: 0.115 kg文字列に対してregex demoを参照してください。 :ここ

enter image description here

(?:(?<=-)-)?が他と先行する-と一致する任意の非捕捉基であります0。 \d+\.\d+は、1桁の数字と一致し、.、もう一度1桁以上一致します。

C#コード:

var results = Regex.Matches(str, @"(?:(?<=-)-)?\d+\.\d+") 
      .Cast<Match>() 
      .Select(m => m.Value) 
      .ToList(); 
+0

データが明らかにダッシュで区切られているので(これは常に負のデータとして扱われます)、これは機能しません。 – juharr

+0

人々は '-'をマイナス、ダッシュ、ハイフンと呼んでいます...はい。そしてOPはそれが働いたことを確認した(答えを受け入れた後にコメントが削除された)。どんな "ダッシュ"にもマッチするためには、パターン中の ' - 'を '\ p {Pd}'に置き換えることができます。 –

+0

はい、私はダッシュ区切り記号がマイナス記号と同じ文字で、他のダッシュ文字の1つではないと仮定しています。 – juharr

関連する問題