2009-10-04 2 views
2

나는 형태의 배열에 문자열의 무리가 [ "이름 : 안녕하세요", "PW : 롤"] 나는 세미콜론과 공간 후 단지 부분을 추출 할 수있는 방법사이에 텍스트를 가져 오는 방법 : 및 문자열?</p> <p>:

루비에?

+0

중복 가능성 [루비의 문자열을 분할하는 방법?] (http://stackoverflow.co m/questions/4032440/how-to-split-a-string in-ruby) –

답변

7
["name: hi", "pw: lol"].map{|x| x.split(': ')[1]} 

는 생산 :

["hi", "lol"] 
+0

: 다음에 항상 하나의 공백이 있는지 확실하지 않은 경우 ':'로 분리 한 다음 .strip 공백을 제거합니다. – Pablo

1

할 수 있습니다 그들을 통해 루프와 :과 같이하여 그들을 분할 :

["name: hi", "pw: lol"].each do |item| 
    puts item.split(":").last.lstrip 
end 

예 :

>> a = ["name: hi", "pw: lol"] 
=> ["name: hi", "pw: lol"] 
>> a.each do |item| 
?> puts item.split(":").last.lstrip 
>> end 

>> hi 
>> lol 
4

제안 사항에 의해 개럿과 애완 동물 어쩌면 그 트릭을 할 것입니다. 그러나 원한다면 한 단계 더 나아가 쉽게 해시로 변환 할 수 있습니다.

  • 분할은 전후 두 공간의 수를 허용, 대장의 유연성을 허용 :

    values = ["name: hi", "pw: lol"] 
    hash = Hash[*values.map{|item| item.split(/\s*:\s*/)}.flatten] 
    # => {"name"=>"hi", "pw"=>"lol"} 
    

    그래서 제가 몇 가지 개선 사항을 지적하자 두 번째 줄에 포장이 많이있다. 우리 ... [["name", "hi"], ["pw", "lol"]]

  • Hash#[] 키, 값, 키 값으로 매핑 될 값들의 목록을 사용하여 배열을 가지고 map 통화 후
  • 그 결과, 우리는 합격 매핑 배열을 평탄화해야 ~ Hash#[]

정확한 요구 사항을 알 수 없으므로 해시를 원하는지 여부는 말할 수 없지만 옵션을 사용하는 것이 좋습니다.

1

나는 이전의 대답은 =

작동하지만 당신이 문자열을 처리하는 정규 표현식을 사용하는 것이 좋습니다 [ "이름 : 안녕하세요", "PW : 롤"]

a.map {| 항목 | item.match (/ \ w + : ([\ w \ S] +) /) [1]}

이하고자 출력 :

=> [ "하이", "웃음" ]

0
a.to_s 
    h=hi~=a 

a.index[h].value 

또는

hi{1} 
+0

답변의 형식이 올바르지 않습니다. 코드 행은 4 칸으로 시작해야합니다. 또한 답변이 작동하지 않는 것 같습니다. 설명을 추가하거나 수정하십시오. – spatz

관련 문제