는 : Poor man's "lexer" for C#비 정규식 대안
그것은 내가 이미 가지고있는 것보다 훨씬 빠른 동안, 난 그냥 아직도 어떻게 일을 좋아하지 않았다 파일 당 약 500ms 걸렸습니다 (스톱워치로 100x36k 토큰 루프에서 시간 측정).
내 토큰의 우선 순위 주위를 이동 한 후에 이미 500ms를 반으로 줄 였고 대부분의 토큰에 "단순 일치"부울을 추가하여 추가로 50ms를 얻었습니다 (기본적으로 단순한 string.Contains(Ordinal)
대신 Regex.Match
).
최상의 성능을 얻으려면 모든 전화기가 Regex.Match
이 아니더라도 최대한 제거하고 싶습니다. 그게 가능하기 위해서는 Regex에 \b
태그를 시뮬레이트하는 무언가가 필요합니다. 그렇지 않으면 단어 경계로 알려져 있습니다 (단어 전체에만 일치해야 함).
"단순한 일치"전후의 문자가 단어가 아닌 문자인지 확인하는 간단한 방법을 쓰는 동안 .NET에이 기본 제공 기능이 있는지 궁금해하고 있었습니까?
만약 내가 내 자신의 방법을 써야한다면, 최선의 접근 방법은 무엇일까요? 내 단어 뒤에있는 문자의 색인을 선택하고 바이트 값이 무엇보다 낮 으면 확인하십시오. 이것에 관한 조언도 환영합니다!
'\ b'는 단어가 문자, 숫자 및 밑줄로 구성된 경우에만 단어 경계와 일치합니다.다른 모든 경우에는 쓸모가 없습니다. – Joey
나는 알고있다. 그러나 헤드 업에 감사한다! '\ b'의 정확한 동작을 시뮬레이트하는 한, 필자의 렉서 (lexer)는 내가 기대하는 정확한 출력을 만들어 낼 것이다. –
정규식을 프리 컴파일하고 있습니까? 그러면 정규식 일치 속도가 빨라질 수 있습니다. 또한 [이 질문] (http://stackoverflow.com/questions/5039512/regex-match-in-c-sharp-performance-problem) 정규식이 처리하는 데 시간이 오래 걸리는 이유에 대한 통찰력을 얻을 수 있습니다. 표현을 보지 않고서는 알기가 어렵습니다. –