设为首页收藏本站

晓东CAD家园-论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1785|回复: 15

[字符串] (XD::String:RegExpR)对字符串进行正则表达式替换

[复制链接]

签到天数: 1370 天

连续签到: 6 天

[LV.10]以坛为家III

点击这里给我发消息

已领礼包: 144个

财富等级: 日进斗金

发表于 2013-7-2 21:41:41 | 显示全部楼层 |阅读模式
函数发布
函数名称: XD::String:RegExpR
调用格式: (XD::String:RegExpR pat str nstr key)
参数说明: pat = 同xxexp
str = 被替换字符串
nstr = 替换字符串
key = 同xxexp
返回值: 替换后的字符串.
函数简介: 对字符串进行正则表达式替换
函数来源: 转载
函数作者: 狂刀
适用版本: 不限 
最后更新时间: 2013-07-02
备注: 具体用法见狂刀的“一刀屠文”

http://bbs.xdcad.net/thread-668983-1-1.html
演示图片: -

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
  1. ;|;; 用正则表达式替换字符
  2. 功能 对字符串进行正则表达式替换.
  3. 参数:
  4. pat = 同xxexp
  5. str = 被替换字符串
  6. nstr = 替换字符串
  7. key = 同xxexp
  8. 返回 :返回替换后的字符串.
  9. |;
  10. (defun XD::String:RegExpR (pat str nstr key /)
  11.   (if (not *xxvb**p)
  12.     (setq *xxvb**p (vlax-get-or-create-object "VBScript.RegExp"))
  13.   )
  14.   (vlax-put *xxvb**p 'Pattern pat)
  15.   (if (not key)
  16.     (setq key "")
  17.   )
  18.   (setq key (strcase key))
  19.   (setq keys '(("I" "IgnoreCase") ("G" "Global")
  20.          ("M" "Multiline")
  21.         )
  22.   )
  23.   (mapcar
  24.     '(lambda (x)
  25.        (if (wcmatch key (strcat "*" (car x) "*"))
  26.          (vlax-put *xxvb**p (read (cadr x)) 0)
  27.          (vlax-put *xxvb**p (read (cadr x)) -1)
  28.        )
  29.      )
  30.     keys
  31.   )
  32.   (vlax-invoke *xxvb**p 'replace str nstr)
  33. )


评分

参与人数 1D豆 +5 收起 理由
牢固 + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

签到天数: 451 天

连续签到: 1 天

[LV.9]以坛为家II

点击这里给我发消息

已领礼包: 343个

财富等级: 日进斗金

发表于 2013-7-2 22:10:31 | 显示全部楼层
提一个改进建议:该函数只能对一个字串进行替换操作一次,如果我要对同一字串进行n次不同的替换操作,譬如去除Mtext格式,得到Mtext真正的文字部分,就需要进行数次替换操作才可以得到最终结果!如果用该函数,就需要数次创建正则表达式对象,替换一次、释放对象的过程!如果大批量的进行该操作,还是会有效率上的影响,如果将 参数pat 和 nstr 改为一一对应的表或字串,即 pat = (表达式1 表达式2 。。。) 或表达式 nstr = (字串1 字串2 。。。)或字串,这样只需要创建一次正则表达式对象,进行n次替换,效率会提高一些!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

签到天数: 1370 天

连续签到: 6 天

[LV.10]以坛为家III

点击这里给我发消息

已领礼包: 144个

财富等级: 日进斗金

 楼主| 发表于 2013-7-2 22:17:37 | 显示全部楼层
程序代码里面其实只打开一次正则表达式对象,我看还是自己在外面用MAPCAR操作吧,放到里面也是加了个MAPCAR套而已。参数看着有些乱。

点评

老大,举个应用示列吧!!!  详情 回复 发表于 2013-7-3 20:12
呵呵,没仔细看代码!原来*xxvbsexp设成了常量!  详情 回复 发表于 2013-7-2 22:51
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

签到天数: 451 天

连续签到: 1 天

[LV.9]以坛为家II

点击这里给我发消息

已领礼包: 343个

财富等级: 日进斗金

发表于 2013-7-2 22:51:25 | 显示全部楼层
XDSoft 发表于 2013-7-2 22:17
程序代码里面其实只打开一次正则表达式对象,我看还是自己在外面用MAPCAR操作吧,放到里面也是加了个MAPCAR ...

呵呵,没仔细看代码!原*xxvbsexp设成了常量!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

签到天数: 25 天

连续签到: 1 天

[LV.4]偶尔看看III

点击这里给我发消息

发表于 2013-7-2 23:27:37 | 显示全部楼层
是的,我的函数里面*开头的都是设常量,如*cad,等。这样不必每次运行函数都生成、释放一次,提高效率。
用mapcar,while等都可以套用这个函数(第一次生成vbs实体会慢一点,之后就没有影响)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

签到天数: 1387 天

连续签到: 12 天

[LV.10]以坛为家III

已领礼包: 604个

财富等级: 财运亨通

发表于 2013-7-3 20:12:31 | 显示全部楼层
XDSoft 发表于 2013-7-2 22:17
程序代码里面其实只打开一次正则表达式对象,我看还是自己在外面用MAPCAR操作吧,放到里面也是加了个MAPCAR ...

老大,举个应用示列吧!!!

点评

正则看着头大,什么时候用再细看  详情 回复 发表于 2013-7-3 21:44
见一刀屠文的帖子啊,里面全是应用啊。 老大也贴过一个,正则表达式 搜索论坛。  详情 回复 发表于 2013-7-3 20:53
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

签到天数: 406 天

连续签到: 2 天

[LV.9]以坛为家II

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-7-3 20:53:20 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2013-7-3 20:12
老大,举个应用示列吧!!!

见一刀屠文的帖子啊,里面全是应用啊。
老大也贴过一个,正则表达式 搜索论坛。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

签到天数: 482 天

连续签到: 1 天

[LV.9]以坛为家II

点击这里给我发消息

已领礼包: 588个

财富等级: 财运亨通

发表于 2013-7-3 21:44:07 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2013-7-3 20:12
老大,举个应用示列吧!!!

正则看着头大,什么时候用再细看
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

签到天数: 21 天

连续签到: 1 天

[LV.4]偶尔看看III

已领礼包: 20个

财富等级: 恭喜发财

发表于 2016-10-28 21:27:18 | 显示全部楼层
想问一个简单的问题 这是用什么语言编写的啊 lisp吗
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

签到天数: 1141 天

连续签到: 35 天

[LV.10]以坛为家III

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-10-28 22:35:34 | 显示全部楼层

Visual LISP, AutoLISP的扩展
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

签到天数: 21 天

连续签到: 1 天

[LV.4]偶尔看看III

已领礼包: 20个

财富等级: 恭喜发财

发表于 2016-10-29 09:38:01 | 显示全部楼层
谢谢啦  
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

签到天数: 1379 天

连续签到: 3 天

[LV.10]以坛为家III

已领礼包: 3065个

财富等级: 富可敌国

发表于 2016-11-3 21:27:16 | 显示全部楼层
好好学习天天向上
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

签到天数: 24 天

连续签到: 2 天

[LV.4]偶尔看看III

已领礼包: 5个

财富等级: 恭喜发财

发表于 2018-9-26 12:02:18 | 显示全部楼层
有一点小问题, XD::String:RegExps函数的局部变量是end,会提示“用户警告: 给保护符号赋值: end”,变量改一下就好了,问题是这个 XD::String:RegExpR函数好像没用到这个变量吧?

点评

没有这变量,应该是你程序其他的地方定义了了END吧。  详情 回复 发表于 2018-9-26 12:27
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

签到天数: 527 天

连续签到: 5 天

[LV.9]以坛为家II

已领礼包: 20个

财富等级: 恭喜发财

发表于 2018-9-26 12:27:07 | 显示全部楼层
wyl219 发表于 2018-9-26 12:02
有一点小问题, XD::String:RegExps函数的局部变量是end,会提示“用户警告: 给保护符号赋值: end”,变量 ...

没有这变量,应该是你程序其他的地方定义了了END吧。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

签到天数: 24 天

连续签到: 2 天

[LV.4]偶尔看看III

已领礼包: 5个

财富等级: 恭喜发财

发表于 2018-9-26 15:25:37 | 显示全部楼层
marting 发表于 2018-9-26 12:27
没有这变量,应该是你程序其他的地方定义了了END吧。

XD::String:RegExpS 有用到end,作为返回值
http://bbs.xdcad.net/forum.php?m ... A%3AString%3ARegExp
XD::String:RegExpR没有用到,但是在定义函数的时候声明了这个局部变量。

点评

谢谢提醒,编辑了帖子,去掉了end  详情 回复 发表于 2018-9-26 15:47

评分

参与人数 1D豆 +10 收起 理由
XDSoft + 10 热心帮忙奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|小黑屋|手机版|Archiver|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )  

GMT+8, 2018-10-20 08:28 , Processed in 0.110268 second(s), 71 queries , Gzip On, WinCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表