문제

기본 값과 몇 가지 사용자 정의 문자열을 구문 분석하고 싶습니다. TextReader - 본질적으로 좋아요 scanf 허용.

  • 내 입력에는 라인 브레이크가 없으므로 readline+regex가 옵션이 아닙니다. 텍스트 입력을 청킹하는 다른 방법을 사용할 수 있습니다. 그러나 문제는 컴파일 타임에 구분기를 모르기 때문에 (너무 까다 롭다), 그 구분 기가 국소화에 의존적 일 수 있다는 것입니다. 예를 들어, 쉼표가 뒤 따르는 플로트는 "1.5"또는 "1,5"일 수 있지만 두 경우 모두 플로트를 구문 분석하려는 경우 플로트는 "욕심"이어야합니다.
  • 안전하기 위해, 나는 내 입력이 적극적으로 적대적이라고 가정하고 싶습니다 (예 : 네트워크 스트림에서 스트리밍) : 즉 의도적으로 청킹 구분자가 누락되었습니다.
  • 맞춤형 Regex를 피하고 싶습니다 : int.parse 및 double.parse는 잘 작동하며 현지화 인식입니다. DateTime을 시작하지 마십시오. 어쨌든 몇 가지 사용자 정의 패턴이 필요할 수도 있지만 해당 시나리오를 다루기 위해 Regexes를 작성하는 것은 재미없는 것처럼 들리지 않습니다.

구체적인 예를 들어, 내가 TextReader 그리고 나는 다음 가치가 double - 전체 스트림을 읽지 않고 현지화 가능한 이중 파서를 수동으로 쓰지 않고 두 배나 제한된 양의 룩보이드를 추출 할 수 있습니까?

유제

이전 질문이 있습니다 "C#에 해당하는 것을 찾고 있습니다 scanf"비슷하게 들리지만 Q+A는 Readline+Regex (피하고 싶습니다)에 중점을 둡니다. 텍스트 트레드에 대한 Regex를 어떻게 사용할 수 있습니까? 대답을 찾지 못했고 (덩어리를 넘어서) 어쨌든 내 자신의 동정인을 쓰지 않기를 원합니다.

도움이 되었습니까?

해결책

그 대답이 부족하고 여전히 아무것도 찾지 못했을 때

  • .NET의 스트림 (또는 TexTreaders)에서 직접 현지화 된 구문 분석을 사용하는 수단은 없으며, 스트림이 체계적인 방식으로 구문 분석 가능한 접두사에 얼마나 많은 해당되는지 알 수있는 방법도 없습니다.
  • .NET의 스트림 (또는 TexTreaders)에 정기적 인 표현식을 적용 할 수있는 방법은 없으므로 이와 같은 것을 직접 구현할 수있는 쉬운 방법은 없습니다.
  • 실제로 이와 같은 것이 필요한 경우 가장 쉬운 옵션은 본격적인 파서 생성기입니다. antlr은 이것을 위해 잘 작동합니다. 기본적으로 복사 할 수있는 기존 문법이 많이 있으며 GUI가 함께 제공되어 문법을 이해하고 .NET, Java, C 및 기타 여러 언어를위한 구문 분석기를 만듭니다. 개발자 친화적이고 빠르지 만 ...하지만 필요한 것에 너무 강력하고 유연합니다. 산탄 총으로 버그를 촬영하는 것처럼 - 나는이 솔루션에 감격하지 않습니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top