현재 규칙 엔진 프로젝트에 대한 계산 파서 도구를 작성하고 있습니다.정규식 반복 패턴의 다른 부분 그룹화
expression = "5 + 6 - 8"
expression.split(' ');
[0]:5
[1]:+
[2]:6
[3]:-
[4]:8
내 코드는이 배열을 사용
계산은 숫자와 연산자를 분리 I 값의 배열로 얻을 사항 String.split를 ('')를 사용 하였다 문자열의 형태를 취 답을 얻으십시오 3 - 현재 저는 왼쪽에서 오른쪽으로 평가를하고 연산자 우선 순위를 다루고 있습니다. 내가 정말 원하는
expression = "12/12/2016 12:00:00 + 30 - 10"
expression.split(' ');
[0]:12/12/2016
[1]:12:00:00
[2]:+
[3]:30
[4]:-
[5]:10
: -
내가 날짜와 함께 작동하도록 계산 문자열 확장하기 위해 찾고 있어요 나는 결과를 얻을 수 있도록 추가 또는 날짜 시간에서 분을 뺀는 불행하게도 내 날짜 시간은 공간이 : 나는 또한 같은 시간에 문자열을 확인할 수 있지만, 불행하게도을 만드는 내 지식이 제한되어 있으므로 정규 표현식을 통해이 문제를 해결하기 위해 기대했다
[0]:12/12/2016 12:00:00
[1]:+
[2]:30
[3]:-
[4]:10
.
누구나 정규 표현식의 예가 있거나 잠재적으로 이렇게 할 수있는 방법에 대한 제안이 있습니까? 숫자와 연산자를 배열에 별도로 저장하는 방법? 아니면 정규 표현식으로는 불가능합니까? 대신 String.Substring()을 사용하여 데이터를 꺼내는 것이 더 낫겠습니까?
편집
SLN 솔루션은 내 문제를 해결, 내 마지막 코드는 다음처럼 보였다 :
var splitExp = Regex.Split(expression, @"[ ](?:(?=\D)|(?<=\D[ ]))");
주는 :
내가 찾던 정확히 무엇expression = "12/12/2016 12:00:00"
splitExp[0] = "12/12/2016 12:00:00"
expression = "12/12/2016 12:00:00 + 30 - 10"
splitExp[0] = "12/12/2016 12:00:00"
splitExp[0] = "+"
splitExp[0] = "30"
splitExp[0] = "-"
splitExp[0] = "10"
.
글쎄, 너무 광범위하게 들리지만'Regex.Split (expression, @ "(?! \ d + :)")'시도해 볼 수도 있습니다. 또한 [* .NET에 문자열 수학 평가 프로그램이 있습니까?] (http://stackoverflow.com/questions/355062/is-there-a-string-math-evaluator-in-net) –
^This를 참조하십시오. 정규식이 올바르게 일치하도록하려면 부정적 예측을 사용하십시오. 주어진 코드는 OP가 필요로하는 것과 정확히 같지 않을 수도 있지만, 적어도 OP가 필요로하는 것이기 때문에 출발점으로 사용할 수 있습니다. – Kadima
또한 [* C# *의 수학 표현식 구문 분석 방법] (http://stackoverflow.com/questions/2853907/how-to-parse-math-expressions-in-c)을 참조하십시오. –