내 정규식이 너무 많이 일치합니다. 중지하려면 어떻게해야합니까?
J0000000: Transaction A0001401 started on 8/22/2008 9:49:29 AM
J0000010: Project name: E:\foo.pf
J0000011: Job name: MBiek Direct Mail Test
J0000020: Document 1 - Completed successfully
이 거대한 못생긴 문자열이 있고 정규식을 사용하여 조각을 추출하려고합니다.
이 경우 "J0000011 :"(11은 매번 다른 숫자가 될 것임) 부분까지 "Project Name"뒤의 모든 것을 가져오고 싶습니다.
여기 내가 가지고 놀던 정규식이 있습니다.
Project name:\s+(.*)\s+J[0-9]{7}:
문제는 마지막에 J0000020에 도달 할 때까지 멈추지 않는다는 것 입니다.
J [0-9] {7} 의 첫 번째 발생에서 정규식을 중지하려면 어떻게해야 합니까?
뒤에 .*
' ?
' 를 추가하여 탐욕스럽지 않게 만드십시오 .
Project name:\s+(.*?)\s+J[0-9]{7}:
탐욕스럽지 않은 수량자를 사용하는 것이 아마도 탐욕스러운 대안보다 더 효율적이기 때문에 아마도 최선의 해결책 일 것입니다 : 탐욕스러운 일치는 일반적으로 가능한 한 멀리 가고 (여기서는 텍스트 끝까지!) 그리고 문자 뒤의 문자를 추적합니다. 나중에 오는 부분을 시도하고 일치시킵니다.
그러나 대신 음수 문자 클래스를 사용하는 것이 좋습니다.
Project name:\s+(\S*)\s+J[0-9]{7}:
\S
"공백을 제외한 모든 것을 의미하며 이것이 바로 당신이 원하는 것입니다.
음, ".*"
탐욕스러운 선택자입니다. ".*?"
후자의 구조 를 사용할 때 정규식 엔진은 모든 단계에서 텍스트 "."
를 일치시켜 ".*?"
. 이것은 예를 들어 뒤에 ".*?"
아무것도 나오지 않으면 아무것도 일치하지 않는다는 것을 의미합니다 .
여기에 제가 사용한 것이 있습니다. s
원래 문자열을 포함합니다. 이 코드는 .NET 전용이지만 대부분의 정규식 유형에는 비슷한 것이 있습니다.
string m = Regex.Match(s, @"Project name: (?<name>.*?) J\d+").Groups["name"].Value;
또한 "Expresso"를 사용하여 정규식을 실험 해 볼 것을 권장합니다. 정규식 편집 및 테스트를위한 훌륭한 (그리고 무료) 유틸리티 인 유틸리티입니다.
장점 중 하나는 UI가 정규식에 익숙하지 않은 사람들이 익숙하지 않을 수있는 많은 정규식 기능을 노출하여 이러한 새로운 개념을 쉽게 배울 수 있다는 것입니다.
예를 들어 UI를 사용하여 정규식을 빌드하고 "*"를 선택하면 "최대한 적게"확인란을 선택하고 결과 정규식을 볼 수있을뿐만 아니라 익숙하지 않은 경우에도 동작을 테스트 할 수 있습니다. 욕심이없는 표현.
해당 사이트에서 다운로드 가능 : http://www.ultrapico.com/Expresso.htm
빠른 다운로드 : http://www.ultrapico.com/ExpressoDownload.htm
(프로젝트 이름 : \ s + [AZ] : (? : \\ w +) +. [a-zA-Z] + \ s + J [0-9] {7}) (? = :)
이것은 당신을 위해 작동합니다.
(? : \\ w +) +. [a-zA-Z] + 추가는. * 대신 더 제한적입니다.
참고 URL : https://stackoverflow.com/questions/22444/my-regex-is-matching-too-much-how-do-i-make-it-stop
'development' 카테고리의 다른 글
람다의 반환 유형은 반환 값으로 추론 할 수 있는데 왜 함수가 아닌가? (0) | 2020.10.19 |
---|---|
angular $ q, for 루프 안팎에서 여러 약속을 연결하는 방법 (0) | 2020.10.19 |
PDF를 PNG로 변환 (0) | 2020.10.19 |
아래 첨자를 통해 하나의 과거 배열 요소의 주소를 가져옵니다. C ++ 표준에 의해 합법적입니까? (0) | 2020.10.19 |
.NET에서 디렉토리 및 파일 쓰기 권한 확인 (0) | 2020.10.19 |