2012-10-02 2 views
0

특정 단어로 시작하는 라인에 문자를 찾기 :정규식 : 어디서나 문서에서 만 나는 다음과 같은 형식의 데이터가 포함 된 큰 텍스트 파일이

AUTHOR: John_Doe 
TITLE: This is a title 
BASENAME: this_is_a_title 

AUTHOR: Jill_Doe 
TITLE: Another Title 
BASENAME: another_title 

AUTHOR: Jack 
TITLE: Last Title 
BASENAME: last_title 

을 어떻게 모두를 찾을 수 있습니까 'BASENAME :'으로 시작하는 줄에서만 문서에서 밑줄을 긋습니까? 내가 lookbehinds 및 그룹화를 시도했지만 내 제한된 정규식 지식은 단지 나를 원으로 돌고있다. 이견있는 사람? 감사!

: 죄송합니다. 지난 밤에 내 책상에서 멀리 떨어져있었습니다. 내가 사용하고있는 정규식의 어떤 맛인지 확실치 않은 것은 Sublime Text 2의 고급 검색을위한 것입니다. 그리고 명확히하기 위해 BASENAME 행에서 밑줄을 찾아서 대시로 변경할 수있게하려고합니다. 그래서 밑줄 만 반환하는 RegEx를 찾고 있습니다.

+1

어떤 언어 (정규 표현식의 즉, 어떤 맛)를 사용할 수 있다면? '/^BASENAME :. * _ /'은 당신이 원하는 것에 가깝습니까? – Beta

+0

언어가 확실치 않아 Sublime Text 2에서 검색하고 바꿉니다. 밑줄을 대시로 바꾸려고하므로 밑줄 만 필요합니다. –

답변

0

나는 ^BASENAME:[^_]*_.*$을 제안합니다. 그러면 모든 행이 검색됩니다. 아니면 포함하는 줄 대신에 개별적으로 밑줄을 모두 찾으려고합니까?

+0

'^'가 줄의 시작과 일치 할 수 있도록 반드시 다중 줄 모드를 지정하십시오. –

+0

안녕하세요 Usta, 그냥 밑줄을 찾으십시오. –

+0

@ JohnRyan 그 경우조차도 * 정규 표현식을 사용해야한다면 * 줄을 먼저 찾은 다음 선택한 줄 내에서 개별 밑줄을 찾아 간단하게 유지합니다. – usta

0

나는 그렇지 않으면 당신은 모든 텍스트가

(?<=^BASENAME:)(.+?(?<underscore>_))* 

당신은 underscore라는 이름의 그룹에 밑줄을 찾을거야, 밑줄을 얻기 위해 그룹화 사용하십시오.

라는 이름의 그룹을 지원하지 않는 언어가 대신

(?<=^BASENAME:)(.+?(_))* 
+1

그 선견은 무의미합니다. 어떤 식 으로든 모든 문자를 소비해야하므로 @usta처럼 쉬운 방법을 사용하지 않으시겠습니까? 또한 동일한 정규 표현식에서 명명 된 그룹과 번호가 매겨진 그룹을 사용하는 것은 좋지 않습니다. 어떤 맛은 그것을 오류로 받아들이지 않을 것입니다. 그리고 어쨌든 명명 된 그룹이 어떻게 작동하는지 어떻게 알 수 있습니까? OP는 아직도 그가 사용하고있는 어떤 맛을 말하지 않았다. –

+0

당신이 맞습니다. 그것은 "BASENAME"이라는 단어 자체를 피하기위한 lookbehind가 될 것입니다. 명명 된 그룹 제안 주셔서 감사합니다. – Gabber

관련 문제