阿霸jun 发表于 2012-7-5 13:29:58

本帖最后由 阿霸jun 于 2012-7-5 13:45 编辑

(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 14:12:22

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:22:12

本帖最后由 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))

fjutcivil 发表于 2014-4-24 22:27:47

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) 我想用读取第一个数第二个 第三个数 用于后面的计算 怎么写啊?

434939575 发表于 2014-8-30 22:08:04

学习了。谢谢。在用这个!
页: 1 [2]
查看完整版本: 练习:提取字符串"BM.H0.2W12TT.4KSE15.Y3E-3PD"中的数字