LISP中在字符串中提取数字
要想把一些不规则含数字的字符串中的数字分别提取处理要怎么办啊?例如:
情况一:"12.21ABC73.9·20A"字符串得到分开的三个数字 "12.21" "73.9" "20"
情况二:"1200ABAC30·10BA"字符串得到分开的三个数字 "1200" "30" "10"
谢谢啊!
http://bbs.mjtd.com/xwb/images/bgimg/icon_logo.png 该贴已经同步到 取个长点勒名字的微博 llsheng_73 发表于 2015-11-1 00:21
这个用正则好象最好搞,只是我不会正则
拿走 学习一下
多谢大神分享,学习一下! 本帖最后由 llsheng_73 于 2015-12-11 11:45 编辑
这个用正则好象最好搞,只是我不会正则
(defun tt(a / b c d e)
(setq b(vl-string->list a))
(while b
(setq a(car b)b(cdr b)c(car b)d(if(or(= a 46)(< 47 a 58))(list a)))
(while(or(and(< -1 a 46)(< -1 c 46))
(or(= a 46)(= c 46))
(and(< 47 a 58)(< 47 c 58))
(and(> a 57)(> c 57))
(and(> a 128)(> c 128))
(and(> a 128)(< c 129)(/=(length d)(*(/(length d)2)2))))
(setq a(car b)b(cdr b)c(car b)
d(if(or(< 47 a 58)(and(= a 46)(not(member 46 d))))(cons a d)d)))
(setq e(if d(cons(reverse d)e)e)))
(mapcar'VL-LIST->STRING(reverse e))
)
_$ (tt"12.21ABC73.9·2.....0A")
("12.21" "73.9" "2.0")
_$ (tt"12.21ABC73.9·20A")
("12.21" "73.9" "20")
llsheng_73 发表于 2015-11-1 00:21 static/image/common/back.gif
这个用正则好象最好搞,只是我不会正则
厉害啊!要是 7888和5555能分开成独立的字符串就更厉害了 取个长点勒名字 发表于 2015-11-1 02:18 http://bbs.mjtd.com/static/image/common/back.gif
厉害啊!要是 7888和5555能分开成独立的字符串就更厉害了
已更正,还是用正则最方便,可惜我不会用那个 llsheng_73 发表于 2015-11-1 09:57
已更正,还是用正则最方便,可惜我不会用那个
谢谢啊。看起来有点复杂,得慢慢理解~ 取个长点勒名字 发表于 2015-11-1 11:41
谢谢啊。看起来有点复杂,得慢慢理解~
这个正需要呢 _$ (RegExpS "+[.0-9]+|+" "13212.00adfsa1321" "i")
("13212.00" "1321")
;;--------------------------------------------主函数----------------------------------------------------;;
(defun xxexp (pat str key / end)
(princ "\n ★\"一刀屠文\"(xxexp)(xxexpr) = 对字符串进行正则表达式测试及替换-by 梁雄啸.2007.7")
(vl-load-com)
(if (not *xxvbsexp)
(setq *xxvbsexp (vlax-get-or-create-object "VBScript.RegExp"))
)
(vlax-put *xxvbsexp 'Pattern pat)
(if (not key)(setq key ""))
(setq key (strcase key))
(setq keys '(("I""IgnoreCase")("G""Global")("M""Multiline")))
(mapcar '(lambda(x)
(if (wcmatch key (strcat "*" (car x) "*"))
(vlax-put *xxvbsexp (read(cadr x)) 0)
(vlax-put *xxvbsexp (read(cadr x)) -1)
))
keys)
(setq matches (vlax-invoke *xxvbsexp 'Execute str))
(vlax-for x matches (setq end (cons (vla-get-value x) end)))
(reverse end)
)
;;--------------------------------------------end----------------------------------------------------;;
(setq str "a-.3A0.0+9.5d-1.3 1.2e-58d4d-15.1d5.6asf-1.2"
pat "[+|-]?\\d*\\.?\\d+(e[+|-]*\\d+)*")
(xxexppat str "")
llsheng_73 发表于 2015-11-1 00:21 static/image/common/back.gif
这个用正则好象最好搞,只是我不会正则
去学习一下啊,等你载誉归来
正则表达式30分钟入门-2013(转)
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=110663&fromuid=399892
菜卷鱼 发表于 2015-11-2 15:12 http://bbs.mjtd.com/static/image/common/back.gif
去学习一下啊,等你载誉归来
正则表达式30分钟入门-2013(转)
那个都不知道看了好多个30分钟了,大概能理解,但不知道怎么在lisp里边写
当然,哪次都没能看够30分钟
页:
[1]
2