tryhi 发表于 2015-10-14 16:45:07

[源码]正则表达式函数

不知道论坛搜索功能较弱还是怎么,找不到一条正则表达式的函数,不过还是发现了些资料,整理写了两个函数供有需要之人调用。由于写得比较拙,望大神们指点。
注:使用该函数需要有正则表达式的基础,例子为读出字符串中所有的数值,即(“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
)


muwind 发表于 2020-7-4 23:56:58


命令: (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
)

tigcat 发表于 2022-9-12 21:54:06

softbird 发表于 2022-9-12 06:36
请问一下楼主,(?

零宽断言autolisp中不支持。

brainstorm 发表于 2020-8-17 20:36:39

在2021下 lispsys 值为1 正则表达式得到结果不是预期的结果 大家有试过么

jltx123456 发表于 2015-10-14 17:01:22

顶,明经 精神传承, 后继有人啊

伪书虫86 发表于 2015-10-15 08:33:13

明经的搜索的确有点笨

czcxxx 发表于 2015-10-15 16:34:34

谢谢分享!!!!!!!!!!!!!!

海盗曹 发表于 2015-10-16 09:20:41

虽然不懂,但是MARK以备学习

pengfei2010 发表于 2017-10-5 20:14:44

回帖是一种美德!感谢楼主的无私分享 谢谢

start4444 发表于 2017-11-24 09:48:39

LIULISHENG 发表于 2018-3-15 12:24:50

真强大,支持楼主

zhong879 发表于 2018-5-10 11:17:13

强,在学习正则
页: [1] 2 3
查看完整版本: [源码]正则表达式函数