YAOSHIWEI 发表于 2014-1-6 10:37:27

在正则表达式中如果让需要替换的字符变成一个可以赋值的变量

本帖最后由 YAOSHIWEI 于 2014-1-6 14:14 编辑

在正则表达式中如果让需要替换的字符变成一个可以赋值的变量   例子是把所有的“中”字变成红色
(vl-load-com)
(setq mtext(vlax-ename->vla-object(car(entsel "\n选择多行文字:"))));转换为VLA对象
(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))
(vlax-put-property regex "Pattern" "中")
(setq s(vlax-invoke-methodregex "Replace" s "{\\C1中}"));如果单改变一个字的颜色、字体该怎么办、以及要不要括号、原文的字有颜色需要改变
(vla-put-textstring mtext s)       这种只可以一个一个字的替换,有点麻烦


(vl-load-com)
(setq mtext(vlax-ename->vla-object(car(entsel "\n选择多行文字:"))));转换为VLA对象
(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}"));如果单改变一个字的颜色、字体该怎么办、以及要不要括号、原文的字有颜色需要改变
(vla-put-textstring mtext s)   

为什么不可以改有什么错误
应该怎么改,我希望可以改成接受文字的输入

YAOSHIWEI 发表于 2014-1-6 13:48:51

就是你想替换哪个字,就输入哪个字,而不是总是改程序

ll_j 发表于 2014-1-6 14:41:51

YAOSHIWEI 发表于 2014-1-6 13:48 static/image/common/back.gif
就是你想替换哪个字,就输入哪个字,而不是总是改程序

你先把字符串加上引号再说:(setq B "\\C1中")

YAOSHIWEI 发表于 2014-1-6 14:50:24

大哥,对不起还是不行,求赐教

edata 发表于 2014-1-6 15:40:03

(defun c:tt ()
(vl-load-com)
(setq
    mtext (vlax-ename->vla-object (car (entsel "\n选择多行文字:")))
)                                        ;转换为VLA对象
(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-method regex "Replace" s b))
                                        ;如果单改变一个字的颜色、字体该怎么办、以及要不要括号、原文的字有颜色需要改变
(vla-put-textstring mtext s)
) ;_ end of defun

YAOSHIWEI 发表于 2014-1-6 15:52:20

本帖最后由 YAOSHIWEI 于 2014-1-6 15:58 编辑

明白呢,谢谢您的回答。,的确有用

edata 发表于 2014-1-6 15:56:53

(defun c:tt (/ B MTEXT NEW_C OLD_TXT REGEX S)
(vl-load-com)
(if (and (setq mtext(vlax-ename->vla-object (car (entsel "\n选择多行文字:"))));转换为VLA对象
           (setq old_txt (getstring "\n输入需要更改的文字:"))
           (setq new_c (getint "\n输入文字颜色<>:"))
      ) ;_ end of and
    (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 (strcat "{\\C" (rtos new_c 2 0) ";" old_txt "}"))
      (vlax-put-property regex "Pattern" old_txt)
      (setq s (vlax-invoke-method regex "Replace" s B))
                                        ;如果单改变一个字的颜色、字体该怎么办、以及要不要括号、原文的字有颜色需要改变
      (vla-put-textstring mtext s)
    ) ;_ end of progn
) ;_ end of if
(princ)
) ;_ end of defun

YAOSHIWEI 发表于 2014-1-6 16:03:55

我为这个纠结了好几天哟,、看来我是虚不受补,得多加努力,谢谢了,

edata 发表于 2014-1-6 16:21:11

话说你上个帖子2012-6-5,一样的内容,这都2014-1-6了,居然还没琢磨透这事。。。

YAOSHIWEI 发表于 2014-1-6 16:28:41

本帖最后由 YAOSHIWEI 于 2014-1-6 16:32 编辑

惭愧,主要还是自己功力不够,看来要回炉重造呢,中间中断了学习,唉,一言难尽,接触LSIP都快两年,还是没有学出个所以然来,工作又不是画图,一直当成兴趣,今年毕业,又得找工作,烦啊
页: [1]
查看完整版本: 在正则表达式中如果让需要替换的字符变成一个可以赋值的变量