- 积分
- 2291
- 明经币
- 个
- 注册时间
- 2005-7-8
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
发表于 2008-10-4 14:09:00
|
显示全部楼层
本帖最后由 作者 于 2008-10-4 14:11:07 编辑
;| 为了方便以后调用,下面改写为函数
|; - (defun strrep (txtstring pat1 pat2 / regex s txtstring)
- (setq regex(vlax-create-object "Vbscript.RegExp"));引用正则表达式控件
- (vlax-put-property regex "IgnoreCase" 0); 不忽略大小写
- (vlax-put-property regex "Global" 1);全文匹配,而不是只匹配第一处
- (vlax-put-property regex "Pattern" pat1)
- ;;[0-9]{1,}表示正整数
- (setq s (vlax-invoke-method regex "Replace" txtstring pat2))
- (vlax-release-object regex)
- (princ (strcat "\n替换前为:" txtstring))
- (princ (strcat "\n替换后为:" s))
- s
- )
- ;|
- 测试:
- (strrep "N=300M=5000;N=5000.03,M=600.6" "(,)?M=\\d+((\\.)\\d+)?" "") ;;这个方法是去掉 "M=数字" 的内容,如果M前有,号也去掉。
- 返回:
- 替换前为:N=300M=5000;N=5000.03,M=600.6
- 替换后为:N=300;N=5000.03
- "N=300;N=5000.03"
- ;使用明总的pattern.
- (strrep "N=300,M=5000;N=5000,M=600" "N=([0-9]{1,}),M=([0-9]{1,})" "N=$1")
- 替换前为:N=300,M=5000;N=5000,M=600
- 替换后为:N=300;N=5000
- "N=300;N=5000"
- |;
复制代码 - ;| 如果不知是M,N呢,比如多字符串是:
- (setq s "N=300,M=5000;N=5000,M=600;A=0.3,B=30.3;X=300,Y=200.,Z=-100")
- (strrep s "(,)?M=\\d+((\\.)\\d+)?" "")
- 返回 "N=300;N=5000;A=0.3,B=30.3;X=300,Y=200.,Z=-100" 显然不符合需要. 改一下pat
- (strrep s "[^N]=(-)?\\d+((\\.)(\\d+)?)?(;|,)?" "")
- 返回:
- "N=300,N=5000,"
- |;
|
|