明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1916|回复: 9

[源码] 提取字符串中的数字,若有则返回实数

[复制链接]
发表于 2021-8-15 14:11:38 | 显示全部楼层 |阅读模式
本帖最后由 gaics 于 2021-8-15 14:14 编辑
  1. (defun ExtractNumbers (str / lst num i)
  2.   (setq lst (vl-string->list str))
  3.   (setq i 0)
  4.   (setq num "")
  5.   (repeat (length lst)
  6.     (if  (or (= (nth i lst) 46)
  7.       (and (> (nth i lst) 47)
  8.      (< (nth i lst) 58)
  9.       )
  10.   )
  11.       (setq num (strcat num (chr(nth i lst))))
  12.     )
  13.     (setq i (1+ i))
  14.   )
  15.   (if (= (strlen num) 0)
  16.     (princ "未找到数字!")
  17.     (atof num)
  18.   )
  19. )

适合从字符串中提取出一组数字(含小数点),如“<正交 开> 80.0 <正交 关>”返回值是80.0。
如果是存在多组数值的情况,提取的结果可能无意义。

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2021-8-15 15:51:28 | 显示全部楼层
本帖最后由 kkq0305 于 2021-8-16 16:05 编辑

写一个提取字符串文字的
(defun extstr (str / nstr)
  (if (/= "" str)
    (if        (wcmatch str "#*")
      (cons (rtos (atof str) 2)
            (extstr (substr str (1+ (strlen (rtos (atof str) 2)))))
      )
      (progn
        (setq nstr "")
        (while (wcmatch str "[~1-9]*")
          (setq        nstr (strcat nstr (substr str 1 1))
                str  (substr str 2)
          )
        )
        (cons nstr (extstr str))
      )
    )
  )
)
如果要数字 则(mapcar 'atof (vl-remove-if-not '(lambda (x) (wcmatch x "#*")) (extstr str)))(setq str "Abcd80.0Edf95.63gHff")
(mapcar 'atof (vl-remove-if-not '(lambda (x) (wcmatch x "#*")) (extstr str)))

(80.0 95.63)
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-8-16 14:47:19 | 显示全部楼层
(ExtractNumbers "Abcd80.0Edfg90.0Hff")
如果要得到所有数字 就把(atof num)改成num。
回复 支持 1 反对 0

使用道具 举报

发表于 2021-8-16 14:31:54 | 显示全部楼层
(ExtractNumbers "Abcd80.0EdfgHff")
80.0
(ExtractNumbers "Abcd80.0Edfg90.0Hff")
80.09

(extstr "Abcd80.0EdfgHff")
("dcbA" "80" "ffHgfdE0.")

点评

(ExtractNumbers "Abcd80.0Edfg90.0Hff") 如果要得到所有数字 就把(atof num)改成num。  发表于 2021-8-16 14:47
发表于 2021-8-16 15:59:31 | 显示全部楼层
jinan1913 发表于 2021-8-16 14:31
(ExtractNumbers "Abcd80.0EdfgHff")
80.0
(ExtractNumbers "Abcd80.0Edfg90.0Hff")

错误已在原楼修改
发表于 2021-8-20 09:37:19 | 显示全部楼层
http://bbs.mjtd.com/thread-180398-1-1.html
这个里面有提取数字的函数
发表于 2022-2-4 10:43:56 | 显示全部楼层
非常不错的程序,谢谢分享
发表于 2023-4-15 11:00:26 | 显示全部楼层
kkq0305 发表于 2021-8-16 15:59
错误已在原楼修改

只有括号,会出错
(setq str "12.5(25.8)")
"12.5(25.8)"
(extstr str) ("12.5000" "." "8.0000")
发表于 2023-8-3 02:59:08 | 显示全部楼层
感谢大佬分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-17 00:43 , Processed in 0.185695 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表