大家进来看 一下,使用正则替换文字出现问题
(vl-load-com)(setq mtext(vlax-ename->vla-object(car(entsel "\n选择多行文字:"))));转换为VLA对象
(if(=(vla-get-objectname mtext) "AcDbMText")
(progn
(setq regex(vlax-create-object "Vbscript.RegExp"));引用正则表达式控件
(vlax-put-property regex "IgnoreCase" 0); 不忽略大小写
(vlax-put-property regex "Global" 1);全文匹配,而不是只匹配第一处
(setq s (vla-get-textstring mtext))
(setq B \\C1中)似乎无法解决在正则表达式中的嵌套问题
(vlax-put-property regex "Pattern" "中")
(setq s(vlax-invoke-methodregex "Replace" s "{b}"))为什么不能使用B代替\\C1,不是已经贱值了吗
(vla-put-textstring mtext s) ;不要有括号,否则会直接加上括号,但如何使用只改变一个字呢
;如果要是单字的话要使用大括号\如果字体已经有颜色、字体呢
(vlax-release-object regex))
(progn
(alert "选择的不是多行文字,请重新选择")
))
我准备把“中”字替换成红色的,但我把\\C中赋给了B就不行,请问这是为什么 我准备把“中”字替换成红色的,但我把\\C中赋给了B就不行,请问这是为什么 本帖最后由 ZZXXQQ 于 2012-6-5 21:50 编辑
别总挂着“正则”,“正则”与替换无关。 我有点不理解啊 还不会用正则,等高人来解答,再学习一下! 不清楚,做等高手来吧,呵呵 本帖最后由 crazylsp 于 2012-6-6 16:47 编辑
{B} 是匹配次数吧,例如A{2}是匹配范围中有两个A的字符。猜测楼主想的是要保存匹配结果 vlax-invoke-methodregex "Replace" s "{b}"说的是{b}改成 "$B",表示引用第B个匹配结果保存。 ZZXXQQ 发表于 2012-6-5 21:49 static/image/common/back.gif
别总挂着“正则”,“正则”与替换无关。
这个用来练习 的 不是,我用正则来替换颜色,我准备把“中”字替换成红色,的应用"\\C中",然后把“\\C中”赋值给B,然后用vlax-put-property regex "Pattern" "中")
(SETQ B\\C中)
(setq s(vlax-invoke-methodregex "Replace" s "{B}"))可以无法改颜色,我使用的是格式代码,反而把“中”替换成了“B”
页:
[1]
2