저는 텍스트 파일을 파싱하는 프로젝트를 진행하고 있습니다. 파일이 네트워킹 장비에서 출력됩니다. 들어오는 문자열은 수천에서 수만 줄에 이릅니다. 다음과 같은 키워드가 포함 된 다양한 항목이 있습니다.문자열 구문 분석 - 각 행을 확인하는 것보다 효율적인 방법이 있습니까?
fcN/N is up
Hardware is Fibre Channel, SFP is short wave laser w/o OFC (SN)
Port WWN is 20:52:00:0d:ec:ef:b0:40
Admin port mode is F, trunk mode is on
snmp link state traps are enabled
Port vsan is 10
fcipN is up
.....
port-channel-N is trunking
......
N은 숫자입니다. 'fcN/N'항목이 항상있을 것이며 다른 두 항목이있을 수도 있고 없을 수도 있습니다. 'fcip'및 'port-channel'항목은 각각의 fcN/N 항목 뒤에 유사한 상태 정보를 갖습니다. 동일한 유형의 모든 항목이 그룹화됩니다. fc 다음에 fcip이 나오고 다른 fc가옵니다. 또한 일반적으로 모든 fc 항목이 나열된 다음 모든 포트 - 채널 다음 모든 fcip하지만 나는 그것을 가정하고 싶지 않습니다. 현재 나는 약 7 가지 RegEx 패턴을 찾고 있습니다. 차례대로 각 라인을 검사하여이 작업을 수행하지만, 모든 작업을 관리하는 것은 번거로운 작업입니다. 나는 줄 바꿈에 문자열을 분할하고 LINQ를 선택하여 3 가지 유형의 항목을 모두 얻으려고 생각했지만, 항상 같은 순서로 그룹화된다고 가정합니다. 나는 또한 한 항목에서 다음 항목까지 모든 것을 일치시키는 약 3 개의 괴물 정규식을 생각했지만, 내 경험에 의하면 작업하기가 어렵고 거의 읽을 수 없다. 내가 생각한 또 다른 사항은 fc 나 port-channel 또는 fcip과 같은 3 개의 키워드를 먼저 찾은 다음 해당 키워드에 고유 한 패턴과 일치하는 if 문을 사용하는 것입니다. 그것은 여전히 모든 3 패턴에 대한 각 라인을 일치합니다.
명확하게 말하면 정규 표현식 패턴이 작동합니다. 나는 6 0r 8 경기에 대한 각 라인을 테스트하는 것보다 더 효율적인 방법을 찾고있다.
다른 아이디어?
지금 성능 문제가 있습니까? Regex가 컴파일되어 있습니까? – Damien
아니요. 나는 단지 무자비한 포스보다 더 우아한 방법을 찾고 있습니다. 더 우아한 방법이 없을지도 모릅니다. 그리고 나는 그것으로 차갑습니다. :) 나는 당신이 정규식을 컴파일 할 수 있는지, 그것이 무엇을 의미하는지 확신하지 못했습니다. –