2013-06-13 1 views
0

한 번에 3 개의 문자열 (그러나 어떤 숫자도 될 수 있음)을 그룹화하려고합니다. 이 코드를 사용 :한 번에 n 개의 문자 그룹 가져 오기

["thi","get","thr","tim"] 

하지만 내가 얻으려고하는 것은 :

"this gets three at a time".scan(/\w\w\w/) 

를 내가 얻을

["thi","sge","tst","hre","eat","ati","me"] 
+1

당신이 <빈 문자열>와 을 교환하십시오 할 수 있습니까? – NeverHopeless

답변

3

\w 일치 문자 숫자 및 밑줄 (즉, 그것은 [a-zA-Z0-9_] 속기의)가 아니라 공백이 있어야합니다. 예상대로 보이지만 마술처럼 공간을 건너 뛰지는 않습니다.

그래서 먼저 공백을 제거해야합니다 :

"this gets three at a time".gsub(/\s+/, "").scan(/.../) 

또는 비 단어 문자 :

"this gets three at a time".gsub(/\W+/, "").scan(/.../) 

당신이 세 개의 문자와 일치하기 전에.

오히려 사용해야하지만

"this gets three at a time".gsub(/\W+/, "").scan(/.{1,3}/) 

도 얻을 수있는 당신은뿐만 아니라 이러한 시도 할 수 있습니다 길이가 3

+0

철저한 설명과 답변을 주셔서 다시 한번 감사드립니다 .-) – user1297102

1
"this gets three at a time".tr(" \t\n\r", "").scan(/.{1,3}/) 
+1

당신의 대답은 훌륭한 답변이며, 본질적으로 인정 된 답변과 동일하지만 칭찬을 아끼지 않는 설명과 함께해야한다고 생각했습니다. 나는 미래를 염두에두고 'tr'을 계속 사용할 것입니다. 고마워요. – user1297102

1

로 나눌 수없는 경우 1 또는 2, 마지막 :

sentence = "this gets three at a time" 
sentence[" "] = "" 
sentence.scan(/\w\w\w/) // no change in regex 

또는

sentence = "this gets three at a time" 
sentence[" "] = "" 
sentence.scan(/.{1,3}/) 
,

또는 :

sentence = "this gets three at a time" 
sentence[" "] = "" 
sentence.scan(/[a-zA-Z]{1,3}/) 
+0

답장을 보내 주셔서 감사합니다. 다른 게시물에서 공백을 먼저 제거해야한다고 설명했습니다. 나는 모두가 나를 제외하고 {1,3} 구문에 대해 알고 있다고 생각한다. – user1297102

+1

그래, 내가 그렇게했다고 했어. 정규 표현식이 완전하지만 공간의 제거가 누락 된 것을 발견 한 이래로. – NeverHopeless

+0

당신이 올 바르고 쌓여 있습니다. 감사! :) – user1297102

관련 문제