2011-11-21 3 views
0

긴 문자열 (즉, 전자 메일에 회신)에서 '>'문자로 시작하는 줄을 제거하려고합니다.레일 문자열에서>로 시작하는 줄을 제거하십시오.

PHP에서는 if 문을 사용하여 각 행을 반복합니다. 리눅스에서는 sed 또는 awk를 사용하려고합니다.

가장 우아한 레일 접근 방식은 무엇입니까?

+1

sed/awk의 해결책도 허용되지 않는 한 sed 및 awk 태그를 제거해야한다고 생각합니다. – Kent

답변

0

. 출력을 여러 줄이 포함 된 한 줄로 지정 하시겠습니까? 나는 예를 추측하고있다.

str.lines.reject{|x| x =~ /^>/}.join # this will return a new string, without those ">" lines 

또는 사용하여 정규 표현식 :

str.gsub(/^>.+\n*/. '') 

더 나은 해결 방법 : 문자열 및 배열 작업을 사용

중 하나

당신은 비 사용해야합니다 욕심 많은 멀티 라인 매칭 모드 정규 표현식에 대한 :.? ^>이 라인

의 시작에 당신의 ">"문자와 일치

str.gsub(/^>.*?$\n*/m, '') # by using gsub!() you can modify the string in place 

* $는 비 (줄이 끝날 때까지 시작 문자 뒤에 어떤 문자와 일치 어떤이 (당신이 정규 표현식의 끝에서)

은 "m"도 있음을 제거 할 멀티 라인 매칭을 나타내는 경우) 욕심

\ n *는을 적용 할, 개행 문자 자체와 일치 문자열의 각 행에 대해 RegExp.

+0

이것이 나에게 마지막 줄에서 실패한 것 같습니다. 왜 이런 경우 일 수 있습니까? '더 나은 솔루션'을 사용하고 있습니다. – cjm2671

+0

\ n을 \ n 대신 넣으십시오. \ n – Tilo

0

그것은 당신이 예상대로 작동합니다 :

your_string.lines.to_a.reject{|line| line[0] == '>'}.join 
+0

이중 음이 아닌가요? 나는 이것이 정확히 반대를 할 것이라고 생각하지만, 나는 고칠 수있다! 감사! – cjm2671

+0

솔루션에서 출력 문자열에 "\ n"문자가 추가로 남습니다. '.to_a '는 필요하지 않습니다. 그리고'line [0] == '>''은 매우 우아하지 않습니다. –

+0

줄이 '>'로 시작해야한다면 가장 빠른 방법입니다. – Hauleth

2

당신이 시도 할 수 있습니다 :

귀하의 질문은 입력이 여러 줄을 포함하는 하나의 문자열이라고 의미한다
your_string.gsub(/^\>.+\n/,'') 
관련 문제