2017-04-05 4 views
1

내가 개별 부품에 대한 간단한 공백으로 구분 된 문자열을 분할하기 위해 노력했습니다의 공백으로 문자열 :분할 예를 들어 SBCL

"test 123 test2   test3" 

을하고 함수는 반환하는 것입니다 :

나는이 :

('test' '123' 'test2' 'test3') 

나의 isp 배포판은 sbcl이고, 나는 split-sequence 모듈을 실험하고 있었다. 그것은 잘 작동하지만 나는 "\ s +"의 줄에 구분 기호로 어떤 것을 입력하는 것처럼 보이지 않습니다.

* (split "\\s+" "foo bar baz 
frob") 
("foo" "bar" "baz" "frob") 

불행하게도 분할 내가 아는 한, SBCL에서 작동하지 않습니다 :

나는이에 대한 내 자신의 함수를 작성하기 전에

, 나는 분할과 같이 간단입니다 분할 명령은 존재하는 것을 보았다. SBCL에서 가져 오기/완료 할 수있는 방법에 대한 제안을 해주셔서 감사합니다.

+1

당신이 할 수있는 [cl-ppcre] (http://weitz.de/cl-ppcre/) 라이브러리를 사용하십시오. – jkiiski

+0

감사합니다. 나는이 접근법을 시도 할 것입니다. 커맨드 라인 도구를 만들면서 최종 바이너리 크기에 너무 많이 기여하지 않기를 바랍니다. –

답변

1
CL-USER> (split-sequence:split-sequence-if 
      (lambda (item) 
       (position item " -+")) 
      "aa bb ccc dddd--eee++++ffff" 
      :remove-empty-subseqs t) 

("aa" "bb" "ccc" "dddd" "eee" "ffff") 
29 
+0

대단히 감사합니다! –

0

는 오는 끌어 오기 요청이 (편집 : 그것은 병합의) : 한편

(str:words " aa bb ") ;; => ("aa", "bb") 

, 우리가 splittrim가 함께 그렇게하는 작은 cl-str 도서관에서.

cl-str

가 몇 가지 물건을 (그렇지 않으면 straigthforward 너무 많은 라이브러리를 필요로하지 않는) 트림, CONCAT, 가입, 분할, 교체 빈? 등을 용이하게 현대적이고 일관성있는 문자열 조작 라이브러리로 의미 ...

+0

고마워, 나는 끝에 분할 라이브러리를 사용하여 이것을 해결할 수 있었다. –