2017-10-30 4 views
0

필드가 도시 쉼표 상태를 유지하기로되어있는 곳에 텍스트 파일 (bar-delimited)이 있습니다. 예 :정규식 : 그룹 OR 그룹

|Boston, MA| 

내 응용 프로그램에서는 두 개의 다른 필드로 도시와 주를 캡처해야합니다. 이것은 전체 라인을 처리 할 수있는 큰 정규식 부분이지만,이 필드를 처리하는 부분이다

\|(.+),(.+[^|]+)\| 

및이 하나 개의 그룹과 다른 그룹에 후 텍스트에 콤마 앞의 텍스트를 캡처한다. 필드가 예상대로 채워지면 잘 작동합니다.

내 문제는 때때로,이 필드에 올 것입니다 중 하나

  • NO 막대 사이의 정보 없음 (||)

또는 - 쉼표없이 텍스트 (|unknown|)

그리고이 정규식을 다음과 같이 수정해야합니다.

    막대 사이에 정보가없는 경우
  • , 쉼표없이 텍스트 문자열은 해당 문자열이 그룹 한으로 캡처됩니다이 있으면 나는 아직도 빈 값

  • 2 개 그룹을 얻고, 그룹 2로 캡처 당신이 얻을해야이 정규식으로 빈 값

답변

2

당신은 무엇을 기대 :

\|\s*([^,|]*?)\s*(?:,\s*([^|]*?)\s*)?\| 

그것은 1 군 채우고에는 쉼표가없는 경우 2, 당신은 빈 얻을 group 2 막대 사이에 값 (또는 공백)이 없으면 두 개의 빈 그룹이 생깁니다.

당신이 공백이 정규식은 다음과 같이 것 경기의 일부가 될하려면 :

\|([^,|]*)(?:,([^|]*))?\| 
+0

이는 영업 이익의 요구 사항에 따라 정답이다. '\ | \ s * ([^, | * *) \ s * (? :, \ s * ([^ |] *) \ s *)? \ | 첫 번째 표현식에서 느린 한정 기호를 제거 할 수 있습니다. ' – ctwheels

+0

감사합니다. lazy quanitifier가 없으면 그룹 값의 끝에 공백을 얻을 수 있습니다. '| Boston, MA | '에서와 마찬가지로 두 번째 그룹은 "MA"(끝의 공백)입니다. – spaark

+0

유효한 포인트, 값을 정리하는 데 도움이 – ctwheels