직렬 포트 통신을 통해 문자열로 데이터를 수신하고 있습니다. 그 부분은 잘 작동합니다. 데이터의 형식은 다음과 같습니다regex를 사용하여 C에서 문자열의 특정 값 추출 #
Distance run: 36in.
Direction in degrees: 275
Total of person founds:11
New Person found in:
Lat/Long: 18.38891, -66.12174
Date: 5/4/2013 Time: 19:13:35.0
Total of person founds:12
New Person found in:
Lat/Long: 18.38891, -66.12175
Date: 5/4/2013 Time: 19:13:37.0
Distance run: 15in.
Direction in degrees: 215
Total of person founds:13
New Person found in:
Lat/Long: 18.38891, -66.12174
Date: 5/4/2013 Time: 19:13:39.0
Distance run: 30in.
Direction in degrees: 180
그러나 이것은 또 다른 거리 실행이있을 수있다 (위도/경도, 날짜와 시간에 그것을 위치 포함) 명 세운 각 블로그의 사이에 약간의 원인을 달라질 수 있습니다 및도 단위의 방향.
정규 표현식을 사용해 보았지만 사용법에 대해서는 잘 모릅니다. 심지어 숫자 만 추출하는 정규식도 있습니다.
var xnumbers = Regex.Split(strFileName, @"[^0-9\.\-]+").Where(c => c != "." && c.Trim() != "");
내가 원하는 것은 거리를 달리게하는 것의 특정 값을 추출하는 것입니다. 첫 번째 값은 36 인치이며이를 저장합니다. 그런 다음 방향의 값을도 단위로 가져 와서 다른 변수에 저장하고 마지막으로 & 위도를 가져 와서 다른 변수에 저장하십시오. 나중에이 데이터를 사용하여 그래프를 그리기 위해 List를 작성하려면이 값이 필요합니다. 이미 드로잉 부분이 있습니다. 나는이 후두둑 알고
해당 거리가이 개 숫자 아니라 고려 걸리지 만 그 값이 1 개 또는 3 개의 숫자가 될 수 있습니다 (예 : 거리를 실행 : 1 인치 또는 거리를 실행 : 219)를
나는이 시도string pattern = @"^Distance Run:(?<distance>.{2}),Direction in degrees:,(?<degress>. {3}),Lat/Long:(\+|\-)(?<latlong>.{18})$";
string distance = string.Empty;
string degrees = string.Empty;
string latlong = string.Empty;
Regex regex = new Regex(pattern);
if (regex.IsMatch(strFileName)) // strFileName is the string with the data
{
Match match = regex.Match(strFileName);
foreach (Capture capture in match.Groups["distance"].Captures)
distance = capture.Value;
foreach (Capture capture in match.Groups["degree"].Captures)
degrees = capture.Value;
foreach (Capture capture in match.Groups["Lat/Long"].Captures)
latlong = capture.Value;
}
하지만 작동하지 않습니다. 나는 어떤 도움과 충고에 감사 할 것입니다. 미리 감사드립니다.
나는 당신이 정규식의 캐주얼 사용을 넘어 추진하고있다 생각합니다. 대신 자신의 파서를 굴리기를 고려 했습니까? 문법은 충분히 간단하며 간단한 구문 분석은 모든 개발자의 툴킷에 있어야하는 기술입니다. –
작업을 수행하기위한 예제 코드를 제공해 주시겠습니까 ?? 미리 감사드립니다. – user2352673
Fermat에게 사과드립니다 : 나는 당신에게 그것을 선물 할 수있는 완벽하고 우아한 수단을 발견했습니다. 불행히도이 주석의 여백은 너무 작아서 포함 할 수 없습니다. –