どう書く?org 税込み価格への修正 を common lispで
つぎは税込み価格への修正
・・・lispの正規表現ライブラリしらん。
・・・lispでの回答を先に見てしまった。まぁいいや。
cl-ppcreというのがあるのか。あとは調べて頑張る。
cl-ppcreのリファレンスは↓ここ
http://weitz.de/cl-ppcre/
おお。結構便利だ。
試した過程も載せとく。恥ずかしいけど。
;;税込み価格への修正 (require 'cl-ppcre) (use-package "CL-PPCRE") (defun test0 () (regex-replace "fo+" "foo bar" "fob")) (defun test1 () (regex-replace "fo+" "foooooo bar" "fob")) ;;case sensitiveらしい (defun test2 () (regex-replace "fo+" "FOO bar" "frob")) ;;(?i)でcase insensitiveになる (defun test3() (regex-replace "(?i)fo+" "FOO bar" "frob")) ;;大文字小文字を残す (defun test4() (regex-replace "(?i)fo+" "FOO bar" "frob" :preserve-case t)) (defun test5() (regex-replace "(?i)fo+" "Foo bar" "frob" :preserve-case t)) ;;\\&でマッチした文字列がとれる?? (defun test6() (regex-replace "bar" "foo bar baz" "'\\&'")) (defun test7() (regex-replace "bo+" "foo booooo baz" "\\&")) ;;\\`でマッチするまでの文字列がとれる?? (defun test8() (regex-replace "bo+" "foooo aaa eee boooo baaaa" "\\`")) ;;\\'でマッチしたもの以降の文字列がとれる?? (defun test9() (regex-replace "bo+" "foo booo baaa" "\\'")) ::\\nで番目にマッチした文字列がとれる (defun test9+() (regex-replace "(fo+)(bo+)(ba+)" "fooobooobaaa" "\\1.\\2.\\3")) ;;リストで指定 (defun test10() (regex-replace "bar" "foo bar baz" '("[マッチ:" :match " マッチ前:" :before-match " マッチ後:" :after-match "]"))) ;;さて本番 ;;matchにはマッチした文字列が入ってくる (defun test11() (regex-replace "(ab).*(cd).*(ef)" "xxxxxabcdefxxxxx" #'(lambda (match &rest registers) (format nil "[~A]" match registers)) :simple-calls t)) ;;resistersにはマッチした文字列がリストになってはいってるっぽい (defun test12() (regex-replace "(ab)(cd)(ef)" "xxxxxabcdefxxxxx" #'(lambda (match &rest registers) (format nil "[~A]" registers)) :simple-calls t)) ;;regex-replaceは残ってても置換をやめちゃう (defun test13() (regex-replace "(ab)(cd)(ef)" "----abcdef|||||||||abcdef____" #'(lambda (match &rest registers) (format nil "~A" registers)) :simple-calls t)) ;;というわけでregex-replace-all (defun replace-kakaku(target) (regex-replace-all "\\d+" target #'(lambda (match &rest registers) (format nil "~A" (write-to-string (truncate (* (parse-integer match) 1.05))))) :simple-calls t))