明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2629|回复: 11

[已解答] 关于带格式 多行文字中 字符串的提取

[复制链接]
发表于 2015-4-3 15:33:56 | 显示全部楼层 |阅读模式
具体需求如下:
需要提取出下面多行文字中的 "AA-1-XX" ,其中AA-1-XX的字符串长度与内容都不确定.
求热心人士帮忙解答一下.






本帖子中包含更多资源

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

x
发表于 2023-4-28 23:08:13 | 显示全部楼层
厉害,好好看到是自己找了很久的。谢谢。
发表于 2022-2-26 22:29:50 | 显示全部楼层
厉害厉害,留个位置
发表于 2022-2-21 19:14:00 来自手机 | 显示全部楼层
学习了,感谢分享
发表于 2015-4-3 16:58:00 | 显示全部楼层
关注下。始终没找到提取Mtext文本内容的方法。
发表于 2015-4-3 20:09:38 | 显示全部楼层
"   3:本图出厂编号 AA-1-XX。   4:面积:XXXXXm2。"
发表于 2015-4-4 10:16:07 | 显示全部楼层
对于Mtxet,建议如下,这样你就不用去除前面的控制符了

(setq obj(vlax-ename->vla-object e))
(setq tex (vlax-get obj 'TextString))
发表于 2015-4-4 11:49:45 | 显示全部楼层
加载[url=http://bbs.mjtd.com/thread-113010-1-1.htmlXLRX_API[/url]:
(xlrx-get (car(entsel))"text")
cad2007以上版本适用
 楼主| 发表于 2015-4-4 14:46:55 | 显示全部楼层
问题已解决,现放出源码.
在此感谢mccad的源码http://bbs.mjtd.com/thread-57445-1-1.html
  1. (DEFUN C:tt(/ N SS   )
  2.         (setq sstxt (ssget '((0 . "TEXT,MTEXT"))))
  3.           (SETQ N 0)
  4.           (WHILE (< N (SSLENGTH sstxt));;
  5.                
  6.                 ;;去除MTEXT中字符串的格式
  7.                
  8.                 (setq mtext (CDR(ASSOC 1 (ENTGET (SSNAME sstxt N)))))
  9.                 (setq txt (mtext2text mtext))
  10.                
  11.                 ;;提取出厂编号,如"AQ-1-XX"
  12.                 (setq  x1 (vl-string-search "编号" txt) )
  13.                 (setq  x2 (vl-string-search "面积" txt) )
  14.                 (if (>  x1  10)
  15.                        
  16.                         (progn       
  17.                                
  18.                                 (setq txtend (substr txt (+ x1 6) (- x2 (+ x1 13))))
  19.                                 (print txtend)

  20.                         )
  21.                 )
  22.                
  23.                 (SETQ N (1+ N))
  24.            )
  25. )

  26. ;;; ==========================================
  27. ;;; 去除MTEXT中字符串的格式,转化为TEXT
  28. ;;; ==========================================
  29. (defun mtext2text(MTextString / regex s)
  30.   (setq regex(vlax-create-object "Vbscript.RegExp")) ;引用正则表达式控件
  31.   (vlax-put-property regex "IgnoreCase" 0) ;不忽略大小写
  32.   (vlax-put-property regex "Global" 1) ;匹配方式,全文字匹配
  33.   (setq s MTextString)
  34.    ;替换\\字符
  35.   (vlax-put-property regex "Pattern" "\\\\\\\\")
  36.   (setq s(vlax-invoke-method  regex "Replace" s (chr 1)))
  37.    ;替换\{字符
  38.   (vlax-put-property regex "Pattern" "\\\\{")
  39.   (setq s(vlax-invoke-method  regex "Replace" s (chr 2)))
  40.    ;替换\}字符
  41.   (vlax-put-property regex "Pattern" "\\\\}")
  42.   (setq s(vlax-invoke-method  regex "Replace" s (chr 3)))
  43.    ;删除段落缩进格式
  44.   (vlax-put-property regex "Pattern" "\\\\pi(.[^;]*);")
  45.   (setq s(vlax-invoke-method  regex "Replace" s ""))
  46.    ;删除制表符格式
  47.   (vlax-put-property regex "Pattern" "\\\\pt(.[^;]*);")
  48.   (setq s(vlax-invoke-method  regex "Replace" s ""))
  49.    ;删除堆迭格式
  50.   (vlax-put-property regex "Pattern" "\\\\S(.[^;]*)(\\^|#|\\\\)(.[^;]*);")
  51.   (setq s(vlax-invoke-method  regex "Replace" s ""))
  52.    ;删除字体、颜色、字高、字距、倾斜、字宽、对齐格式
  53.   (vlax-put-property regex "Pattern" "(\\\\F|\\\\f|\\\\C|\\\\H|\\\\\T|\\\\Q|\\\\W|\\\\A)(.[^;]*);")
  54.   (setq s(vlax-invoke-method  regex "Replace" s ""))
  55.    ;删除下划线、删除线格式
  56.   (vlax-put-property regex "Pattern" "(\\\\L|\\\\O|\\\\l|\\\\o)")
  57.   (setq s(vlax-invoke-method  regex "Replace" s ""))
  58.    ;删除不间断空格格式
  59.   (vlax-put-property regex "Pattern" "\\\\~")
  60.   (setq s(vlax-invoke-method  regex "Replace" s ""))
  61.    ;删除换行符格式
  62.   (vlax-put-property regex "Pattern" "\\\\P")
  63.   (setq s(vlax-invoke-method  regex "Replace" s ""))
  64.    ;删除换行符格式(针对Shift+Enter格式)
  65.   (vlax-put-property regex "Pattern" "\n")
  66.   (setq s(vlax-invoke-method  regex "Replace" s ""))
  67.    ;删除{}
  68.   (vlax-put-property regex "Pattern" "({|})")
  69.   (setq s(vlax-invoke-method  regex "Replace" s ""))
  70.    
  71.    ;替换回\\,\{,\}字符
  72.   (vlax-put-property regex "Pattern" "\\x01")
  73.   (setq s(vlax-invoke-method  regex "Replace" s "\\"))
  74.   (vlax-put-property regex "Pattern" "\\x02")
  75.   (setq s(vlax-invoke-method  regex "Replace" s "{"))
  76.   (vlax-put-property regex "Pattern" "\\x03")
  77.   (setq s(vlax-invoke-method  regex "Replace" s "}"))
  78.    
  79.   (vlax-release-object regex)
  80.   s
  81. )
发表于 2015-4-9 10:32:24 来自手机 | 显示全部楼层
不错不错,收藏了来自: Android客户端
发表于 2015-4-30 17:02:22 | 显示全部楼层
好同志,继续加油
发表于 2015-5-2 07:19:38 | 显示全部楼层
感谢分享程序,学习了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-16 16:19 , Processed in 0.212729 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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