이 코드가 있지만 모든 코드에 병목 현상이 있습니다. 효율성을 높이기 위해 이것을 다시 작성하는 방법에 대해 알고 싶습니다.정규식이 너무 느리게 실행됩니다.
Regex.Replace(text, @".+[a-zA-Z0-9]{17,500}.+(\r\n)", Environment.NewLine, RegexOptions.Compiled);
이 코드가 있지만 모든 코드에 병목 현상이 있습니다. 효율성을 높이기 위해 이것을 다시 작성하는 방법에 대해 알고 싶습니다.정규식이 너무 느리게 실행됩니다.
Regex.Replace(text, @".+[a-zA-Z0-9]{17,500}.+(\r\n)", Environment.NewLine, RegexOptions.Compiled);
.+[a-zA-Z0-9]{17,500}.+(\r\n)
패턴으로 인해 한 번에 전체 라인을 잡고 다음 17 (예, 17 개 문자를 체크하고 다음 정규식 엔진을 호출의 문자열을 수용하기 위해 백 트럭 처음 .+
서브 패턴에 매우 비효율적이다 하루) 영숫자 문자. 이는 값 비싼 작업입니다.
접근 방식을 다시 고려해야합니다. Regex.Replace
을 사용하는 대신 줄 바꿈으로 줄 바꿈 문자 (큰 줄 바꿈 문자열 인 경우)를 분할하거나 줄을 가져 오거나 파일에서 읽는 경우 한 줄씩 줄을 읽은 다음 각 줄 (항목 단지에 대한 간단한
Regex.IsMatch(line, "[a-zA-Z0-9]{17}")
와 목록/배열 또는 선) 안에 17 개 연속 ASCII 영숫자 문자를 확인하거나 - 정말 17 500 같은 문자의 한계 부과 :
Regex.IsMatch(line, @"(?<![a-zA-Z0-9])[a-zA-Z0-9]{17,500}(?![a-zA-Z0-9])")
하는 경우를 일치 항목이 발견되면 항목/행을 건너 뛰고, 그렇지 않으면 나중에 출력/결과 배열에 추가하여 나중에 string.Join("\n", resulting_list)
이됩니다.
(?<![a-zA-Z0-9])
은 앞의 문자가 ASCII 영숫자 문자가 아니고 (?![a-zA-Z0-9])
이 다음 문자를 똑같이 검사하는지 확인합니다.
성능 향상을 확인할 수 있습니다. 그것은 상대적인 50 %에서 1 %로 떨어진다. – realPro
무엇을하려하십니까? 편집 : 또한, 귀하의 프로그래밍 언어는 무엇입니까? – bfontaine
코드를 모두 표시 할 수 있습니까? – STF
'텍스트 '란 무엇입니까? 일부 파일 내용? 한줄 한 줄씩 (또는 여러 줄 문자열을 사용하는 경우 줄 바꿈으로 구분),'Regex.IsMatch (줄, "[a-zA-Z0-9] {17500}")'로 각 줄을 확인하십시오. 일치하면 라인을 건너 뛰고, 그렇지 않으면 출력에 추가하십시오. 효율성에 대해 물어 보면, 게시물의 정규식만으로는 충분하지 않습니다. 자세한 내용을 입력하십시오. –