(defun a-todo-to-lisp ( a-todo ) (cl-ppcre:register-groups-bind (section detail estimate) ("(\\++)\\S*([^,]*)(.*)" a-todo) (list (let ((sum 0 )) (cl-ppcre:do-matches (s e "\\+" section) (incf sum (- e s))) sum) detail (let ((str-estimate (cl-ppcre:scan-to-strings "[0-9]+" estimate))) (if (null str-estimate) 0 (read-from-string str-estimate))))))
cl-ppcre をつかって、+++なんとか,20 みたいなのを (3 "なんとか" 20) に置き換えた。タブを使ってレベルを分けるのとちょっとにているけど、違うアプローチで簡単に解析した。う~ん。一気に、構文解析している。いいのか?わるいのか?
汎用性はないな。