2016-07-29 4 views
1

정규 표현식을 사용하여 MARC 레코드를 구문 분석하고 첫 번째 캡처 된 그룹으로 필드를 반환하고 두 번째로 캡처 된 그룹으로 값을 반환하고 싶습니다. 여기에 내가 정규식에 대한 지금까지있어 무엇 :MARC 레코드를 정규식으로 구문 분석하려면 어떻게해야합니까?

(\n[0-9]{3})[ 0-9]{4}([^\n]*) 

([^\n]*) 같은 선으로 위대한 작품을 다음 줄 바꿈까지 모든 것을 최대를 캡처 마지막 캡처 그룹 : 그러나

001 868229892 
100 1 Montgomery, L. M.|q(Lucy Maud),|d1874-1942.,|eauthor. 
245 10 Anne of Green Gables /|cL.M. Montgomery. 
250 Aladdin hardcover edition. 
264 1 New York :|bAladdin,|c2014. 
300 440 pages &#59;|c22 cm 
336 text|2rdacontent. 
337 unmediated|2rdamedia. 
338 volume|2rdacarrier. 

이 라인을 통해 휴식 값에 올 때, 정규식이 더 이상 작동하지 않습니다 :

520 Anne, an eleven-year-old orphan, is sent by mistake to 
     live with a lonely, middle-aged brother and sister on a 
     Prince Edward Island farm and proceeds to make an 
     indelible impression on everyone around her. 
650 0 Shirley, Anne (Fictitious character)|vJuvenile fiction. 

는 다음 정지 영역은 위의 650해야한다 . 그래서 정규 표현식은 까지 줄 바꿈과 그 뒤에 3 자리 숫자이 올 때까지 모든 것을 포착해야합니다.

나는 ([^\n0-9]*)을 시도했으나 숫자 또는 줄 바꿈 이외의 다른 문자로 해석되는 경우 은 어떤 순서로든으로 해석됩니다. 그 정확한 순서로 줄 바꿈과 3 자리 숫자 을 일치시킬 필요가 있습니다.

답변

1

regex101에서 입증 된 바와 같이이 정규식 :

(\n[0-9]{3})[ 0-9]{4}([^\n]+(?:\n\s+[^\n]+)*)

캡처 그룹 ([^\n]+(?:\n\s+[^\n]+)*) 경기

  • 비 바꿈 : [^\n]+
  • 다음 여분의 수 줄 : (?:\n\s+[^\n]+)*
0

줄 바꿈 뒤에 3 자릿수가 오도록 끝까지 음수 미리보기를 추가하십시오. 또한 정규식을 줄이기 위해 수행 할 수있는 몇 가지 작업이 있습니다.

(\n\d{3})[ \d]{4}((?:(?!\n\d{3}).)*) 
+0

그것은 작동하지 않습니다. – JakeParis

+0

regex101에서 잘 작동합니다. – RamenChef

관련 문제