2017-04-04 3 views
1

값을 직렬 포트에서 읽어들입니다.대시로 구분 된 문자열에서 음수 및 양수 값의 정규식

이 들어오는 데이터가 지금처럼 무엇인가 :

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

그리고 이것은 예를 들어, 그 값 중 하나뿐만 아니라 음수가 될 수 때때로, 그러나

@"(\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

당신은 (경기 값에 추가, 즉 소비 얻을 것이다) 다른 전에 "대시는"이 있는지 확인하기 위해 lookbehind 패턴을 사용할 수 있습니다 :

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

--15.0cm-47.8cm--83.1cm: 0.115 kg 문자열에 대해 regex demo를 참조하십시오 :

enter image description here 여기

(?:(?<=-)-)? 다른,845,678,316,321 앞에는되는 - 일치 선택적 비 - 포착 기이고 0. \d+\.\d+은 1 + 숫자, . 및 1 자리 이상의 숫자와 일치합니다.

C# 코드 :

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

데이터가 분명히 대시로 구분되어 있기 때문에 (데이터가 항상 음수로 표시됨) 작동하지 않습니다. – juharr

+0

사람들은 '-'를 마이너스, 대시, 하이픈이라고 부릅니다. 예. 그리고 OP는 그것이 효과가 있음을 확인했습니다 (답변을 수락 한 후 주석이 삭제되었습니다). 어떤 "대시 (dash)"와 일치 시키려면 패턴에서'-'를'\ p {Pd} '로 대체 할 수 있습니다. –

+0

예, 대시 구분 기호가 빼기 기호와 같은 문자이고 다른 대시 문자 중 하나가 아닌 것으로 가정합니다. – juharr