1
정규 표현식을 사용하여 GEDCOM 파일을 구문 분석하려고하는데 거의 끝나지만 표현식은 줄의 끝에 선택 텍스트가있는 행에 대해 텍스트의 다음 행을 가져옵니다. 각 레코드는 한 줄이어야합니다. 행 끝의 정규 표현식
이
는 파일에서 추출입니다 :0 HEAD
1 CHAR UTF-8
1 SOUR Ancestry.com Family Trees
2 VERS (2010.3)
2 NAME Ancestry.com Family Trees
2 CORP Ancestry.com
1 GEDC
2 VERS 5.5
2 FORM LINEAGE-LINKED
0 @[email protected] INDI
1 BIRT
이것은 내가 사용하고있는 정규 표현식이다 :
이에 텍스트를 포함하지 않는 제외한 모든 라인을 작동(\d+)\s+(@\[email protected])?\s*(\S+)\s+(.*)
첫 번째 것과 같은 끝. 예를 들어, 첫 번째 레코드의 마지막 캡처 그룹에는 '1 CHAR UTF-8'이 포함됩니다. 여기
는 보라색 캡처 그룹이 다음 줄에 출혈 방법을 보여주는, regex101.com에서 스크린 샷입니다 :. 나는를 제한하기 위해 $ 한정자를 사용하여 시도* 그냥 라인 끝 , 두 번째 줄 또한 줄 끝이기 때문에 실패합니다.
도움을 주시면 감사하겠습니다.
데이브
'\ s'는 개행과 일치하거나, 정규 공간으로 바꾸거나'[^ \ S \ r \ n]'(PCRE이면'\ h')로 바꾸십시오. https://regex101.com/r/N2ZWWo/1를 참조하십시오 ('^'는 여러 줄 옵션과 함께 추가됩니다). –
Wiktor에게 깊은 감사의 말을 전합니다. 답을 만들고 싶다면 최선을 다할 것입니다. 이것은 트릭을 수행하는 것 같습니다 : (\ d +) + (@ \ S + @)? * (\ S +) * (. *) –
'. *'는 기본적으로 욕심이 많으므로 최대한 일치시킵니다. '. *? $'를 시도해 비 탐욕적인 일치로 만드십시오. – phuzi