2014-02-11 5 views
1

정규식을 사용하여 데이터를 추출하는 데 문제가 있습니다. 일반적으로 쉽게 할 수 있지만 여기에 붙어 있습니다. 나는 "N"후 앞에 오는 부분을 추출하기 위해 노력하고있어 내가 할 수REGEX를 사용하여 데이터 구문 분석

데이터를 "종료"를 한 두 시간 만 발생할 수 있습니다 이제

jack. n n klln kjj kll end 
jane.  n n kien wsdn end 
jone.  n losn djs end 
jord. n  sdjn sdkln end 

이다 "N".

나는 그것은 모든 인스턴스에 대해 작동 $ 3

\(.+?\.) .*n.* (n|\s) (.*) end\ 

추출하려면이 옵션을 사용했지만, 그것은 또한 "losn"를 포함 그것이 무엇 인 라인 3. 작동하지 않습니다. 모든 경우에 두 개의 "n"또는 하나의 "n"이 발생할 수 있습니다. 만약 하나의 "n"이 존재한다면, "n"은 내가 원하는 데이터로부터 떨어진 공간 일 수있다. 또는 멀리 많은 공간.

답변

1

좋아, 나는 그것을했다고 생각한다.

나는 변경 :

\(.+?\.) .*n.* (n|\s) (.*) end\ 

에 (A를 추가 된 보조 "N"선택하기 위해 "?") :

\(.+?\.) .*n?.* (n|\s) (.*) end\ 
1

을 당신이 뭔가를 사용하는 경우는 안전 할 것 같아요 대신이 :

'모든 문자를'일치 .를 사용
^[^.]+\.\s*n(?:\s*n)?\s* (.*) end 

효율성 문제가 발생할 수 있습니다. 따라서 [^.]+을 사용하는 것이 좋습니다 (첫 번째 부분에도 마침표가 포함될 수 있으므로 .+?).

\s* 대신 \s*을 사용하고 보조 그룹 (?:\s*n)?을 사용하여 가능한 한 두 번째 n을 사용하십시오.

regex101 demo

관련 문제