2013-10-22 2 views
0

내 텍스트 파일의 줄 수가 1 만 개가 넘습니다. 나는 각 라인의 시작과 탭 (\t) 사이의 모든 낱말들, 문자 s을 찾으려면두 문자 사이의 문자를 대체하는 정규식

[line 1] This is the first line. [tab] Here is the content.[end of line] 

: 각 행은 같은 단어 또는 탭과 내용으로 다음 문구로 시작

다음
[line 1] Thi| i| the fir|t line. [tab] Here is the content.[end of line] 

내가 무엇을했는지 있습니다 :

Search: ^(.*)s+(.*)?\t 
Replace: \1|\2\t 

텍스트 모양을 수 있도록하고 파이프 (|)에 의해 교체 그것은 작동하지만 문제는 하나의 교체에서 s을 대체하지 않는다는 것입니다. s 모든 단어가 바뀌기 전에 여러 번 Replace All을 클릭해야합니다.

그래서 내 질문에 온다 : 단 하나의 검색에서 문자 s의 모든 발생을 대체하고 대체하려면 어떻게해야합니까?

TextWrangler에서 작업하고 있지만 다른 편집자들과도 괜찮습니다.

고마워요.

답변

1

s가 포함 된 행을 검색하고 일치하는 항목을 찾습니다. 대신 직접 s를 검색하고 lookahead를 사용하여 탭이 뒤따라 지도록해야합니다.

Search: s(?=.*\t) 
Replace: | 

마지막 탭까지 모든 것을 포착합니다. - 주 콘텐츠에 탭이 포함될 수 있다면 문제가 될 수 있습니다.

첫 번째 탭 이후에 잡기를 중지하려면 속임수를 써야합니다. 가변 길이 부정 lookbehind AFAIK 어떤 regexp 방언에서 작동하지 않기 때문에. 더 s는 첫 번째 탭 전에 발생없는 경우

그러나 우리는 경우에 전체 라인을 잡을 것 ... 마지막의 전체 라인을 잡아 것을

Search: (?:(^[^s\t]*\t.*$)|s([^s\t]*(?:(?=s.*\t)|\t.*$))) 
Replace: |\1\2 

이를 보장 할 수 있습니다. 그리고 | 그 줄 앞에. 이 문제를 둘러 볼 방법이 없습니다.

+0

많은 감사. 물론, 내 주요 콘텐츠가 때로는 몇 가지 탭을 포함하기 때문에 그것은 문제가 될 것입니다. 각 줄의 첫 번째 탭 다음에 검색 및 바꾸기를 제한하려면 어떻게합니까? –

+0

나는 이것을 해결하기위한 제안을했다. 그것은 끝나지 않았지만. – Taemyr

+0

@NiamhDoyle 확인. 현재 솔루션은 내가 할 수있는 최선책이라고 생각합니다. (오타를 제외하고) – Taemyr

관련 문제