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