[源码]正则表达式函数
不知道论坛搜索功能较弱还是怎么,找不到一条正则表达式的函数,不过还是发现了些资料,整理写了两个函数供有需要之人调用。由于写得比较拙,望大神们指点。注:使用该函数需要有正则表达式的基础,例子为读出字符串中所有的数值,即(“13049.66”“19.574”)
正则使用教程http://bbs.mjtd.com/thread-182083-1-1.html
(setq str "S=13049.66 平方米 合19.574亩")
(try-StrRegExp str "[\\d.]+")
(try-StrRegExpReplace str "[\\d.]+" "替换掉")
;匹配正则表达式
;;1、字符串 2、表达式
;;(setq str "S=13049.66 平方米 合19.574亩")
;;(try-StrRegExp str "[\\d.]+")
(defun try-StrRegExp(str1 expr)
(_Replace str1 expr nil "")
)
;正则表达式字符替换.
;;1、字符串 2、表达式 3、替换
;;注:本函数为匹配多行、忽略大小写
;;(setq str "S=13049.66 平方米 合19.574亩")
;;(try-StrRegExpReplace str "[\\d.]+" "替换掉")
(defun try-StrRegExpReplace(str1 expr str2)
(_Replace str1 expr T str2)
)
(defun _Replace(str1 str2 bull str3 / lst matchcollect reg)
(setq lst '())
(setq reg (vlax-create-object "vbscript.regexp")) ;创建正则表达式
(vlax-put-property reg 'global -1) ;是否匹配全部 (-1是 ,0 不是)
(vlax-put-property reg 'Multiline -1);是否多行匹配 (-1是 ,0 不是)
(vlax-put-property reg 'IgnoreCase -1);是否忽略大小写 (-1是 ,0 不是)
(vlax-put-property reg 'pattern str2);lisp \\
;;; 1.(vlax-invoke-method reg 'test str)判断字符串是否与正则表达式匹配
(if (vlax-invoke-method reg 'test str1)
;;; 2.(vlax-invoke-method reg 'Execute str)生成匹配集合
(progn (setq matchcollect (vlax-invoke-method reg 'Execute str1))
;;; 3.打印匹配的每个集合元素的value
(vlax-for match_item matchcollect (setq lst(cons(eval (vlax-get-property match_item 'value))lst)))
)
)
;;; 4.替换匹配的值(vlax-invoke-method reg 'Replace str "replace")生成str副本
(setq lst(reverse lst))
(if bull
(setq lst(vlax-invoke-method reg 'Replace str1 str3)))
;;;----------------- end 正则表达式方法
(vlax-release-object reg);释放内存
lst
)
命令: (try-StrRegExp (atxt) "[\\d.]+")
选择的文字 H型钢H446×199×8×12;L=3990 然后.......
选择对象: ("3990" "712" "00" "78" "00" "7199" "00" "446")
cad2010就是这么任性
嘿嘿 atxt如下定义,测试用得比较多
(defun atxt( / get_txt)
(if(setq ss(entsel));选择单个图元
(setq get_txt (cdr (assoc 1(entget (car ss)))))
)
get_txt
) softbird 发表于 2022-9-12 06:36
请问一下楼主,(?
零宽断言autolisp中不支持。 在2021下 lispsys 值为1 正则表达式得到结果不是预期的结果 大家有试过么 顶,明经 精神传承, 后继有人啊 明经的搜索的确有点笨 谢谢分享!!!!!!!!!!!!!! 虽然不懂,但是MARK以备学习 回帖是一种美德!感谢楼主的无私分享 谢谢 真强大,支持楼主 强,在学习正则