文字列を分割する - lisp-cookbook-ja/common-lisp GitHub Wiki

文字列 シーケンス ライブラリ cl-ppcre split-sequence

文字列を分割する

CLiki:CL-PPCREのsplitを使うことで、正規表現にマッチした部分で文字列を分割することができます。

(ppcre:split ":" "a:b:c")
;=> ("a" "b" "c")

また、CLiki:SPLIT-SEQUENCEのsplit-sequenceを使うことでも、文字列を分割できます。

(split-sequence:split-sequence #\: "a:b:c")
;=> ("a" "b" "c")
;   5

こちらは正規表現ではなく、区切りとなる文字によって、文字列を分割します。

ライブラリを使うまでも無い簡易的な場面では、search と subseq を使っても分割できます。

(再帰なので、長い文字列を処理するとスタックを使い尽くす場合があります。)

(defun split (x str)
  (let ((pos (search x str))
        (size (length x)))
    (if pos
      (cons (subseq str 0 pos)
            (split x (subseq str (+ pos size))))
      (list str))))

(format t "~S" (split ":" "a:b:c"))
;=> ("a" "b" "c")