(defun test(pat str / aa)
(setq aa (regex pat str ""))
(setq aa (mapcar '(lambda (x) (atof x)) aa))
)
regex是正则函数,测试:
命令: (test "\\d*[.]?(\\d+E-)?(\\d+E)?\\d+[.]?" "BM.H0.2W12TT.4KSE15.Y3E3PD")
(0.2 12.0 0.4 15.0 3000.0)
命令: (test "\\d*[.]?(\\d+E-)?(\\d+E)?\\d+[.]?" "BM.H0.2W12TT.4KSE15.Y3E-3PD")
(0.2 12.0 0.4 15.0 0.003)
Gu_xl 发表于 2012-7-5 10:15 static/image/common/back.gif
;;参考Lee Mac 的代码修改而来,原帖地址:
http://lee-mac.com/parsenumbers.html
8楼代码已修正Bug 本帖最后由 xshrimp 于 2012-7-5 14:39 编辑
(defun gxl(s / dot)
(
(lambda (l )
(read
(strcat "("
(vl-list->string
(apply
'append
(mapcar
(function
(lambda (a b c d)
(if
(or
(< 47 b 58)
(and (= 43 b) (< 47 c 58) )
(and (= 45 b) (< 47 c 58) )
(and (= 46 b)(< 47 a 58) (< 47 c 58))
(and (= 46 b)(not (< 47 a 58)) (< 47 c 58))
(and (= 46 b)(< 47 a 58) (not (< 47 c 58)))
(and (or (= 69 b)(= 101 b)) (< 47 a 58) (or (< 47 c 58) (and (or (= 43 c) (= 45 c)) (< 47 d 58))))
)
(if (and (= 46 b)(not (< 47 a 58)) (< 47 c 58))
(if (not dot)
(progn (setq dot t) (list48 b))
(list48 b)
)
(if (and (= 46 b)(< 47 a 58) (not (< 47 c 58)))
(if (not dot)
(listb 48 32)
(progn (setq dot nil)(list 32 ))
)
(if (and (< 47 b 58) (= 45 c))
(progn (setq dot nil) (list b 32))
(if (and (= 46 b)(< 47 a 58) (< 47 c 58))
(if (not dot)
(progn (setq dot t) (list b))
(progn (setq dot t) (list 32 48 b))
)
(list b)
)
)
)
)
(progn (setq dot nil) '(32))
)
)
)
(cons nil l)
l
(append (cdr l) (list nil))
(append (cddr l) (list nil nil))
)
)
)
")"
)
)
)
(vl-string->list s)
)
)
(defun qjchen (s /lst regex x)
(setq regex (vlax-create-object "VBScript.RegExp"))
(vlax-put-property regex 'globalactrue)
(vlax-put-property regex 'pattern "[-+]?(\\d+)?[.]?(\\d+)([+-](\\d+))?")
(vlax-for x (vlax-invoke regex 'execute s)
(setq lst (cons (atof (vlax-get x 'value)) lst))
)
(vlax-release-object regex)
(reverse lst)
)
(list "1.1.1.1" "5e-0.5A12""5e0.5A12" "AB0.125e5C+-.2.2D3")
正确返回值
((1.1 0.1 0.1) (5 -0.5 12) (5 0.5 12) (12500.00.2 0.2 3))
(mapcar 'gxl (list "1.1.1.1" "5e-0.5A12""5e0.5A12" "AB0.125e5C+-.2.2D3"))
=>((1.1 0.1 0.1) (5E-0 12) (5E0 12) (12500.0 0.2 0.2 3))
(mapcar 'qjchen (list "1.1.1.1" "5e-0.5A12""5e0.5A12" "AB0.125e5C+-.2.2D3"))
=>((1.1 0.1 0.1) (5.0 0.5 12.0) (5.0 0.5 12.0) (0.125 5.0 -0.2 0.2 3.0))
Gu_xl 发表于 2012-7-5 10:15 static/image/common/back.gif
;;参考Lee Mac 的代码修改而来,原帖地址:
http://lee-mac.com/parsenumbers.html
G版 请问 我要接力怎么接啊 比如你的程序出来的是(0.4 5 6) 我想用读取第一个数第二个 第三个数 用于后面的计算 怎么写啊? 学习了。谢谢。在用这个!
页:
1
[2]