明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2144|回复: 9

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

[复制链接]
发表于 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-method  regex "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-method  regex "Replace" s "{B}"));如果单改变一个字的颜色、字体该怎么办、以及要不要括号、原文的字有颜色需要改变
(vla-put-textstring mtext s)
   


为什么不可以改有什么错误
应该怎么改,我希望可以改成接受文字的输入
 楼主| 发表于 2014-1-6 13:48:51 | 显示全部楼层
就是你想替换哪个字,就输入哪个字,而不是总是改程序
发表于 2014-1-6 14:41:51 | 显示全部楼层
YAOSHIWEI 发表于 2014-1-6 13:48
就是你想替换哪个字,就输入哪个字,而不是总是改程序

你先把字符串加上引号再说:(setq B "\\C1中")
 楼主| 发表于 2014-1-6 14:50:24 | 显示全部楼层
大哥,对不起还是不行,求赐教
发表于 2014-1-6 15:40:03 | 显示全部楼层
  1. (defun c:tt ()
  2.   (vl-load-com)
  3.   (setq
  4.     mtext (vlax-ename->vla-object (car (entsel "\n选择多行文字:")))
  5.   )                                        ;转换为VLA对象
  6.   (setq regex (vlax-create-object "Vbscript.RegExp"))
  7.                                         ;引用正则表达式控件
  8.   (vlax-put-property regex "IgnoreCase" 0) ; 不忽略大小写
  9.   (vlax-put-property regex "Global" 1)        ;全文匹配,而不是只匹配第一处
  10.   (setq s (vla-get-textstring mtext))
  11.   (setq B "{\\C1;中}")
  12.   (vlax-put-property regex "Pattern" "中")
  13.   (setq s (vlax-invoke-method regex "Replace" s b))
  14.                                         ;如果单改变一个字的颜色、字体该怎么办、以及要不要括号、原文的字有颜色需要改变
  15.   (vla-put-textstring mtext s)
  16. ) ;_ end of defun
 楼主| 发表于 2014-1-6 15:52:20 | 显示全部楼层
本帖最后由 YAOSHIWEI 于 2014-1-6 15:58 编辑

明白呢,谢谢您的回答。,的确有用
发表于 2014-1-6 15:56:53 | 显示全部楼层
  1. (defun c:tt (/ B MTEXT NEW_C OLD_TXT REGEX S)
  2.   (vl-load-com)
  3.   (if (and (setq mtext(vlax-ename->vla-object (car (entsel "\n选择多行文字:"))));转换为VLA对象
  4.            (setq old_txt (getstring "\n输入需要更改的文字:"))
  5.            (setq new_c (getint "\n输入文字颜色<>:"))
  6.       ) ;_ end of and
  7.     (progn
  8.       (setq regex (vlax-create-object "Vbscript.RegExp"))
  9.                                         ;引用正则表达式控件
  10.       (vlax-put-property regex "IgnoreCase" 0) ; 不忽略大小写
  11.       (vlax-put-property regex "Global" 1)
  12.                                         ;全文匹配,而不是只匹配第一处
  13.       (setq s (vla-get-textstring mtext))
  14.       (setq B (strcat "{\\C" (rtos new_c 2 0) ";" old_txt "}"))
  15.       (vlax-put-property regex "Pattern" old_txt)
  16.       (setq s (vlax-invoke-method regex "Replace" s B))
  17.                                         ;如果单改变一个字的颜色、字体该怎么办、以及要不要括号、原文的字有颜色需要改变
  18.       (vla-put-textstring mtext s)
  19.     ) ;_ end of progn
  20.   ) ;_ end of if
  21.   (princ)
  22. ) ;_ end of defun
 楼主| 发表于 2014-1-6 16:03:55 | 显示全部楼层
我为这个纠结了好几天哟,、看来我是虚不受补,得多加努力,谢谢了,
发表于 2014-1-6 16:21:11 | 显示全部楼层
话说你上个帖子2012-6-5,一样的内容,这都2014-1-6了,居然还没琢磨透这事。。。
 楼主| 发表于 2014-1-6 16:28:41 | 显示全部楼层
本帖最后由 YAOSHIWEI 于 2014-1-6 16:32 编辑

惭愧,主要还是自己功力不够,看来要回炉重造呢,中间中断了学习,唉,一言难尽,接触LSIP都快两年,还是没有学出个所以然来,工作又不是画图,一直当成兴趣,今年毕业,又得找工作,烦啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-4-30 12:40 , Processed in 0.200391 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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