YAOSHIWEI 发表于 2012-6-5 21:19:43

大家进来看 一下,使用正则替换文字出现问题

(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 "选择的不是多行文字,请重新选择")

   ))

YAOSHIWEI 发表于 2012-6-5 21:23:27

我准备把“中”字替换成红色的,但我把\\C中赋给了B就不行,请问这是为什么

YAOSHIWEI 发表于 2012-6-5 21:24:12

我准备把“中”字替换成红色的,但我把\\C中赋给了B就不行,请问这是为什么

ZZXXQQ 发表于 2012-6-5 21:49:49

本帖最后由 ZZXXQQ 于 2012-6-5 21:50 编辑

别总挂着“正则”,“正则”与替换无关。

asir木木三 发表于 2012-6-6 09:59:56

我有点不理解啊

zyhandw 发表于 2012-6-6 11:10:37

还不会用正则,等高人来解答,再学习一下!

c735023723 发表于 2012-6-6 16:31:51

不清楚,做等高手来吧,呵呵

crazylsp 发表于 2012-6-6 16:44:19

本帖最后由 crazylsp 于 2012-6-6 16:47 编辑

{B} 是匹配次数吧,例如A{2}是匹配范围中有两个A的字符。猜测楼主想的是要保存匹配结果 vlax-invoke-methodregex "Replace" s "{b}"说的是{b}改成 "$B",表示引用第B个匹配结果保存。

YAOSHIWEI 发表于 2012-6-6 20:24:37

ZZXXQQ 发表于 2012-6-5 21:49 static/image/common/back.gif
别总挂着“正则”,“正则”与替换无关。

这个用来练习 的

YAOSHIWEI 发表于 2012-6-6 20:36:08

不是,我用正则来替换颜色,我准备把“中”字替换成红色,的应用"\\C中",然后把“\\C中”赋值给B,然后用vlax-put-property regex "Pattern" "中")
(SETQ B\\C中)
         (setq s(vlax-invoke-methodregex "Replace" s "{B}"))可以无法改颜色,我使用的是格式代码,反而把“中”替换成了“B”
页: [1] 2
查看完整版本: 大家进来看 一下,使用正则替换文字出现问题