2012-11-22 2 views
0

나는 루비에서 다음 텍스트를 가지고 있는데, 나는 ----과 ---- (내용) 사이의 부분만을 추출하고 싶지만 그렇게 할 수는 없다.루비에서 텍스트 섹션을 얻는 방법

mystring.match(/^-*(.*?)^-*/m)[1] 

이 텍스트입니다 :

Congrats! You just got a new contact lead 

Here's the information your contact submitted: 

------------------------------------------------------------------------------------ 

    Name: testing 
    Email: [email protected] 
    Mensaje: hello 
this is a nice test 

------------------------------------------------------------------------------------ 
For your convenience, we have automatically added this contact and message to your account. 

Best of luck! 
- LeadABC 

답변

5

을 시도해보십시오 ...

mystring.match(/-+(.*?)-+/m)[1] 

RubyFiddle, 내가 사용하는 정규식으로 시도했다.

내용이 인 경우 -이 있으면 깨집니다. 최소한 1- 자와 같이 최소한을 허용하면 더 강력 할 것입니다. 이렇게하려면 {10,} 한정 기호를 사용할 수 있습니다.

mystring.match(/(-{10,})(.*?)\1/m)[2] 

RubyFiddle.

이 버전은 또한 일치 -의 수는 보장 균형 (이것은 시작에 16 개 - 문자가 일치하는 경우, 너무 끝에 16 - 문자와 일치해야합니다).

+0

'm'은 무엇을합니까? – oldergod

+1

@oldergod 멀티 라인 모드. '.' 매치 개행을 만드십시오. – alex

+1

뒷면 참조를 잘 사용합니다. '-----'줄의 길이가 모두 같다고 가정합니다. –

0

당신의 내용은 - 포함되어있을 수 있습니다,하지만 당신은 여전히 ​​^$과 라인 끝을 일치시킬 수 있습니다, 그래서 시도 :

mystring.match(/(^-{84}$)(.*?)\1/m)[2] 
+1

... 그리고 수신자가 하나도 지우지 않았 으면 좋겠다. :) – alex

+0

Hehe, 네. 시스템이 생성되면 이렇게 정밀하게 진행할 수 있습니다. – Anson

0

분할을 단지에서 가능한 흰색 문자로 연속 하이픈으로 구성된 라인 끝은 그것을 튼튼하게 만들 것이다.

mystring.split(/^[ \t]*-+[ \t]*$/)[1] 
관련 문제