找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: marting

[他山之石] 从格式化的MTEXT获得真实的文本的代码

[复制链接]

已领礼包: 19个

财富等级: 恭喜发财

发表于 2016-11-17 15:46:39 | 显示全部楼层

好长的代码呀

点评

根据大师 晨语 提供的源码,改了一下。原程序比这个还长  发表于 2016-11-17 15:54
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

发表于 2016-11-17 16:01:31 | 显示全部楼层

LeeMAC的这个不简单?
  1. ;;-------------------=={ UnFormat String }==------------------;;
  2. ;;                                                            ;;
  3. ;;  Returns a string with all MText formatting codes removed. ;;
  4. ;;------------------------------------------------------------;;
  5. ;;  Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
  6. ;;------------------------------------------------------------;;
  7. ;;  Arguments:                                                ;;
  8. ;;  str - String to Process                                   ;;
  9. ;;  mtx - MText Flag (T if string is for use in MText)        ;;
  10. ;;------------------------------------------------------------;;
  11. ;;  Returns:  String with formatting codes removed            ;;
  12. ;;------------------------------------------------------------;;

  13. (defun LM:UnFormat ( str mtx / _replace rx )

  14.     (defun _replace ( new old str )
  15.         (vlax-put-property rx 'pattern old)
  16.         (vlax-invoke rx 'replace str new)
  17.     )
  18.     (if (setq rx (vlax-get-or-create-object "VBScript.RegExp"))
  19.         (progn
  20.             (setq str
  21.                 (vl-catch-all-apply
  22.                     (function
  23.                         (lambda ( )
  24.                             (vlax-put-property rx 'global     actrue)
  25.                             (vlax-put-property rx 'multiline  actrue)
  26.                             (vlax-put-property rx 'ignorecase acfalse)
  27.                             (foreach pair
  28.                                '(
  29.                                     ("\032"    . "\\\\\\\\")
  30.                                     (" "       . "\\\\P|\\n|\\t")
  31.                                     ("$1"      . "\\\\(\\\\[ACcFfHLlOopQTW])|\\\\[ACcFfHLlOopQTW][^\\\\;]*;|\\\\[ACcFfHLlOopQTW]")
  32.                                     ("$1$2/$3" . "([^\\\\])\\\\S([^;]*)[/#\\^]([^;]*);")
  33.                                     ("$1$2"    . "\\\\(\\\\S)|[\\\\](})|}")
  34.                                     ("$1"      . "[\\\\]({)|{")
  35.                                 )
  36.                                 (setq str (_replace (car pair) (cdr pair) str))
  37.                             )
  38.                             (if mtx
  39.                                 (_replace "\\\\" "\032" (_replace "\\$1$2$3" "(\\\\[ACcFfHLlOoPpQSTW])|({)|(})" str))
  40.                                 (_replace "\\"   "\032" str)
  41.                             )
  42.                         )
  43.                     )
  44.                 )
  45.             )
  46.             (vlax-release-object rx)
  47.             (if (null (vl-catch-all-error-p str))
  48.                 str
  49.             )
  50.         )
  51.     )
  52. )
  53. (vl-load-com)

评分

参与人数 1D豆 +5 收起 理由
/db_自贡黄明儒_ + 5 确实短,但不完善

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2016-11-17 16:24:35 | 显示全部楼层

测试代码{pre} ....{/pre}
(defun C:w3 (/ MTX OBJ OBJNAME STR)
  (setq obj (vlax-ename->vla-object (car (nentsel))))
  (setq OBJNAME (vlax-get-property OBJ "ObjectName"))
  (if (EQ OBJNAME "AcDbMText")
    (setq mtx T)
  )
  (setq Str (vlax-get obj 'TextString))
  (LM:UnFormat Str mtx)
)


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2016-11-17 16:44:12 | 显示全部楼层

1 多行文字的上画线,堆垛删除不了
2 单行文字的上下标删除不了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2016-11-18 01:29:58 | 显示全部楼层

测试了下,LE的确实有不完善的地方

搜狗截图20161118012855.png

命令: !a
"{\\fSimHei|b1|i1|c134|p2;a\\C2;b\\C256;c\\C3;d}"


命令: (LM:UNFORMAT a t)
"abcd112"


多出了112
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-11-18 02:10:02 | 显示全部楼层
本帖最后由 newer 于 2016-11-18 04:57 编辑

试试这个,看行不

(defun XD::Mtext:UnFormat (str)
  (xd::string:regexpr "(\\{)|(\\\\f[\\u4E00-\\u9FA5A-Za-z0-9\\-_ ]+)|(\\|((b|i)[0|1]))|(\\|(c|p)[0-9]+?;)|(\\\\[L|O])|(\\\\H[0-9.]+x;)|(\\\\(Q|T|W)[0-9.]+;)|(\\\\c[0-9]+;)|(\\})"
                       str "" ""
  )
)

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2016-11-18 08:04:36 | 显示全部楼层

好像不行呢,老大?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2016-11-18 08:14:03 | 显示全部楼层
本帖最后由 /db_自贡黄明儒_ 于 2016-11-18 08:19 编辑

对于较长、较为复杂的内容,可用 MTEXT 创建多行文字。多行文字可布满指定宽度,同时还可以在垂直方向上无限延伸。可以设置多行文字对象中单个字或字符的格式。
多行文字是由任意数目的文字行或段落组成的,布满指定的宽度。与单行文字不同的是,在一个多行文字编辑任务中创建的所有文字行或段落都被当作同一个多行文字对象。可以移动、旋转、删除、复制、镜像、拉伸或比例缩放多行文字对象。
与单行文字相比,多行文字具有更多的编辑选项。例如可以将下划线、字体、颜色和高度的变化应用到段落中的单个字符、词语或词组。
本节内容:
创建多行文字
格式化多行文字
创建多行文字
可通过使用AddMText方法创建多行文字对象(Mtext对象)。该对象需要三个值作为输入:文本字串、文字放置于图形中的插入点和文字边界框的宽度。
文本字串为实际显示的文字。可接受Unicode、控制代码和特殊字符。插入点是放置文字的位置,它一个包含代表图形中三维WCS坐标的三个双精度变体数组。文字宽度是描述文字边界框宽度的正数。宽度以当前单位计算。
当Mtext对象创建后,可将文字高度、对齐方式、旋转角度和样式应用到Mtext对象上,或应用字符格式到选定的字符上。对齐方式要考虑文字边界以决定文字要插入的位置。

所创建的Mtext对象的高度与文字字串中的字符数多少相关。
格式化多行文字
新的文字将自动采用当前文字样式的特征。默认的文字样式为STANDARD。可通过设置单独字符的格式和设置MText对象的属性来覆盖默认的文字样式。也可使用以下章节的所描述的方法来显示格式化的或特殊的字符。
诸如下划线、堆叠文字或字体等格式化选项或应用于在段落中的单独的单词或字符。诸如样式、对齐方式、宽度和旋转等定向选项将影响整个MText对象。可通过使用属性和关联到MText对象的方法来改变这两种格式。
格式化单独的单词或字符
可通过指定与文字格式代码相等效的ASCII来应用格式到单独的单词或字符。可为文字加下划线、上划线和创建堆叠文字。也可更改颜色、字体和文字高度。可更改文字字符间的间隔或缩小字符的宽度。要应用格式化,使用下表所列出的格式化代码:
多行文字格式化代码
格式化代码        用 途        输入内容...        显示内容...
\O...\o        打开或关闭上划线        Autodesk \OAutoCAD\o 2000         

\L...\l        打开或关闭下划线        Autodesk \OAutoCAD\l 2000         

\~        插入不断开空格        Autodesk AutoCAD\~2000         

\\        插入反斜杠        Autodesk \\AutoCAD         

\{...\}        插入开始或结束大括号        Autodesk \{AutoCAD\} 2000         

\F文件名        更改为指定的字体文件        Autodesk \Ftimes;AutoCAD 2000         

\H值;        按图形单位更改文字高度        Autodesk \H2;AutoCAD         

\H值x;        更改文字高度为当前文字高度的倍数        Autodesk AutoCAD \H3x;2000         

\S...^...;        堆叠在\u12289、#或^符号后的文字        1.000\S+0.010^-0.000;         

\T值;        从0.75到4倍之间调整字符的间隔        \T2;Autodesk         

\Q角度;        更改倾斜角度        \Q20;Autodesk         

\W值;        更改宽度因子以产生较宽的文字        \W2;Autodesk         

\A值;        设置对齐值;有效值如下: 0(底对齐)、1(中间对齐)、2(顶对齐)        \A1;1\S1/2         

\P        换行        Autodesk \PAutoCAD 2000         

使用大括号可单独格式化括号内的内容。大括号可嵌套八层。
也可在一行中或段落中输入控制代码的ASCII等效值以显示格式化或特殊字符,就如公差和标注符号。
以下控制字符可用于创建图中的文字内容。(该字串的ASCII等效值请查看之下的样例。)
{{.5x; Big text} ; over text;/; under
text}

使用控制字符以格式文字
格式化多行文字对象
可设置控制样式、文字对齐方式和文字边框的大小及旋转的MText对象属性。这些设置影响到整个文字边框内,而不是某些单词或字符。
StyleName属性设定默认的字体和格式化新建文字的特征。当创建文字后,可从现存样式列表中选择要用的样式。
当更改了部分字符中已被局部格式化过MText对象的样式时,样式将应用到整个对象中,而不保留字符的任何格式化。举个例子,将TrueType样式更改为使用SHX字体或其它TrueType字体的样式将导致整个对象都使用新的字体,任何字符的格式化也随之丢失。
对齐方式控制着文字的排列和基于指定对齐点的流向。文字的对齐是与左边界和右边界相关。而从段落的中间、顶部或底部流出(即开始填充文字)是与上边界和下边界相关。上下边是基于多行文字对象的最上行的最下行。AutoCAD提供9种对齐的设置:左上(TL)、中上(TC)、右上(TR)、左中(ML)、正中(MC)、右中(MR)、左下(BL)、中下(BC)和右下(BR)。



使用AttachmentPoint属性可更改MText的对齐方式。
Rotation属性控制着文字边界的旋转角度。
使用Unicode字符、控制代码和特殊字符
可在文本字串中使用Unicode字符、控制代码和特殊字符以显示符号。(所有非文字字符必须用其ASCII等效值输入。)
Unicode 字符描述 
Unicode 字符        描述
\U+00B0        角度符号
\U+00B1        正负差符号
\U+2205        直径标注符号
除了使用Unicode字符显示特殊字符外,也可通过在文本字串中包括控制信息来指定特殊字符。使用一对百分比号(%%)以引入每一控制序列。
该控制代码使用于标准AutoCAD字体和PostScript字体:
%%nnn
在 VB 或 VBA 字串中,以上例子要按以下输入
Dim percent as Long
percent = ASC("%")
TextString = chr(percent) + chr(percent)
+ "nnn"
这些控制代码只用于标准AutoCAD字体:
控制代码描述 
控制代码        描述
%%o        切换上划线模式的开关
%%u        切换下划线模式的开关
%%d        绘制角度符号
%%p        绘制正负差符号
%%c        绘制直径标注符号
%%%        绘制单个百分比号
AutoCAD2006文字堆叠攻略
AutoCAD2006中,用于输入、编辑多行文字的功能非常强大。现在总结以下常用的几种格式说明:
一、在【文字替换模式】下编辑,用于修改“标注”的“文字替换”特性:
1.        上划线:
以\O(大写字母O)开始,以\o(小写字母)结束,期间的所有字符会加上上划线;例如:\OAutocad\o(请在Autocad中试验,下同)
2.        下划线:
以\L(大写字母L)开始,以\l(小写字母L)结束,期间的所有字符会加上下划线
3.        不间断空格:
以\~(~符号是键盘上,最左上角的第二排第一个,横排数字键1的前面那个)作为空格标记,连续几个\~,就有几个空格
4.        指定字符高度:
以\H(大写字母)开始,其后跟字符高度数值,两种形式,分别为
o        \Hn:表示其后的字符高度为n毫米高度;例如:
A\H2;B ==> 输出结果中B的字符高度为 2毫米 高度;
o        \Hnx:表示其后的字符高度为该\H说明符之前字符高度的n倍;例如:
A\H2x;B ==> 输出结果中B的字符高度为A字符高度的 2倍;
o        提醒:最好在\Hn或者\Hnx后紧跟一个分号
5.        公差堆叠:
以\S(大写字母)开始,其后可相配 /(斜线)、#(井号)、^(键盘上F4和F5键下面横排数字键6那个按键)等三类公差书写形式;
o        /(斜线):表示 水平分数线 形式的公差书写格式,如:A\S+0.01/-0.02;(请在AutoCad中试验,下同)
o        #(井号):表示 斜线分数线 形式的公差书写格式,如:A\S+0.01#-0.02;
o        ^(计算机中幂次方符号):表示 无分数线 形式的公差书写格式,如:A\S+0.01^-0.02;
o        提醒:在完成公差数值输入完毕后,最好加上分号,以示结束公差书写
6.        文字对齐:
以\A(大写字母)开始,其后跟0、1、2数值,0表示对正,1表示垂直居中,2表示顶端对齐
例如:\A1;M\S3/4; 你可以把这行文字中的\A后面的1改为0或者2在看看效果;
7.        其他特殊字符:
%%D——角度的度数符号;%%P——正负符号;%%C——直径符号;
二、在多行文本编辑器中编辑
在多行文本编辑器中将要上下堆叠的文字中间插入特殊符号再选择上它们,点击该编辑器工具栏上部的(a/b)可以将它们写成分数形式
1.        公差(插入"^")堆叠选定文字,将第一个数字堆叠到第二个数字的上方, 数字之间没有直线。
2.        分数水平 (插入"/")堆叠选定文字,将第一个数字堆叠到第二个数字的上方,中间用水平线隔开。
3.        分数倾斜 (插入"#")第一个数字堆叠到第二个数字的上面,数字之间用斜线隔开。
在进行修改编辑时选择要编辑的堆叠部分点击鼠标右键选择特性可以分别编辑上下行,具体的操作如下:
        "三分之一":在文字编辑器中先输入1/3,然后选中1/3字符,并按(a/b)按钮
        "6的3次方":在文字编辑器中输入63^,然后选中3和^,并点击(a/b)按钮
        "A3"(3为下标):在文字编辑器中输入A^3,然后选中^和3后,点击(a/b)按钮
        "30正负0.002":在文字编辑器中输入30+0.002^-0.002,然后选中0.002^-0.002后,点击(a/b)按钮
三、如何在AutoCAD中查找此知识点的联机帮助
请打开AutoCAD中的自带帮助(运行AutoCAD软件,选择【帮助】菜单中的“帮助”菜单项),在左侧的“搜索”中输入
在替换文字编辑器中设置文字格式
关键字,即可查到相应的联机帮助。
如果使用替换文字编辑器,则通过输入格式代码应用格式。可为文字加下划线、删除线和创建堆叠文字。用户可以修改颜色、字体和文字高度,还可以修改文字字符间距或增加字符本身宽度。要应用格式,请使用下表中列出的格式代码:
段落格式代码
格式代码        作用        输入...        要生成 ...
\0...\o        打开和关闭
下划线        Autodesk \OAutoCAD\o         

\L...\l        打开和关闭
下划线        Autodesk \LAutoCAD\l         

\~        插入不间断
空格        Autodesk AutoCAD\~LT         

\\        插入反斜杠        Autodesk \\AutoCAD         

\{...\}        插入左大括号和右大括号        Autodesk \{AutoCAD\}         

\Cvalue;        修改为
指定的颜色        Autodesk \C2;AutoCAD         

\ File name;        修改为
指定的字体文件        Autodesk \Ftimes; AutoCAD         

\Hvalue;         修改为
以图形单位表示的
指定文字高度        Autodesk \H2;AutoCAD         

\Hvaluex;         将文字高度修改为
当前样式文字高度的
数倍        Autodesk \H3x;AutoCAD         

\S...^...;        堆叠 \、# 或 ^ 符号后的文字        1.000\S+0.010^-0.000;         

\Tvalue;        调整字符之间的间距。有效值范围为字符间原始间距的 0.75 倍到字符间原始间距的 4 倍。        \T2;Autodesk         

\Qangle;        修改倾斜角度        \Q20;Autodesk         

\Wvalue;        修改宽度因子生成宽字        \W2;Autodesk         

\A        设置对齐方式值,有效值为:0、1、2
(底端对正、居中对正、顶端对正)        \A1;1\S1/2         

\P        结束段落        Autodesk\PAutoCAD         

大括号最多可以嵌套八层。
也可以使用控制代码添加特殊的字符,例如公差和标注符号。请参见 MTEXT。
样例:在替换文字编辑器中设置文字格式
本例说明了下图中的文字是如何创建的。

在替换文字编辑器中输入下面各行:
{{\H1.5x; Big text} \A2; over text\A1;/\A0; under text}\P
{\A0;Baseline: 1 \S1/2;}\P
{\A1;Center: 1 \S1/2;}\P
{\A2;Topline: 1 \S1/2;}\P
{Tolerances: \A1;1.000\H.75x;\S+0.010^-0.000;}\P
{Architectural: 9-{\H.666x;\A2;11\A1;/\A0;16}\A2;"}\P
通过输入控制代码或 Unicode 字符串可以输入以下特殊字符或符号。或在在位文字编辑器中,在展开的工具栏上单击“符号”。
注意不支持在垂直文字中使用符号。
Unicode 字符串和控制代码
控制代码        Unicode 字符串        结果
%%d        \U+00B0        度符号 (°)
%%p        \U+00B1        公差符号 (±)
%%c        \U+2205        直径符号 ( )

要插入以下文字符号,请在展开的“文字格式”工具栏上单击“符号”,或输入适当的 Unicode 字符串:
文字符号和 Unicode 字符串
名称        符号        Unicode 字符串
几乎相等         
\U+2248
角度         
\U+2220
边界线         
\U+E100
中心线         
\U+2104
增量         
\U+0394
电相位         
\U+0278
流线         
\U+E101
标识         
\U+2261
初始长度         
\U+E200
界碑线         
\U+E102
不相等         
\U+2260
欧姆         
\U+2126
欧米加         
\U+03A9
地界线         
\U+214A
下标 2         
\U+2082
平方         
\U+00B2
立方         
\U+00B3

以上文字符号适用于下列 TrueType (TTF) 字体和 SHX 字体:
        Simplex
        RomanS
        Isocp
        Isocp2
        Isocp3
        Isoct
        Isoct2
        Isoct3
        Isocpeur(仅 TTF 字体)
        Isocpeur italic(仅 TTF 字体)
        Isocteur(仅 TTF 字体)
        Isocteur italic(仅 TTF 字体)

Mtext格式控制.rar

104.46 KB, 下载次数: 32, 下载积分: D豆 -1 , 活跃度 1

售价: 1 D豆  [记录]

tes1.rar

23.22 KB, 下载次数: 8, 下载积分: D豆 -1 , 活跃度 1

dwg

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-11-18 08:48:25 | 显示全部楼层

举个不行的例子,老黄。

MTEXT控制符众多,如果发现解析到的,把那个的匹配串添加到上面函数的正则 | 后面 就可以添加。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2016-12-5 01:51:51 | 显示全部楼层

试试下面的, 如果发现有例外的没处理的,把字符串贴上来
(defun XD::Mtext:UnFormat (str / m1 match)
  (setq match "(\\\\A[0-9]+;)|(\\{)|(\\\\f[\\u4E00-\\u9FA5A-Za-z0-9\\-_ ]+)|(\\|((b|i)[0|1]))|(\\|c[0-9]+)|(\\|p[0-9]+?;)|(\\\\[L|O])|(\\\\H[0-9.]+x;)|(\\\\(Q|T|W|A)[0-9.]+;)|(\\\\c[0-9]+;)|(\\\\F(.*?);)|(\\\\~)|(\\})")
  (setq str (XD::STRING:RegexpR match str "" ""))
  (if (setq m1 (XD::STRING:RegexpS "(?!\\\\s\\^)([\\u4E00-\\u9FA5A-Za-z0-9]+)(?=;)" str ""))
    (setq str (XD::STRING:RegexpR "\\\\s\\^([\\u4E00-\\u9FA5A-Za-z0-9]+);" str (car m1) ""))
  )
  (if (setq m1 (XD::STRING:RegexpS "(?!\\\\s)([\\u4E00-\\u9FA5A-Za-z0-9]+)(?=\\^;)" str ""))
    (setq str (XD::STRING:RegexpR "\\\\s([\\u4E00-\\u9FA5A-Za-z0-9]+)\\^;" str (substr (car m1) 2) ""))
  )
  (XD::STRING:RegexpR "\\\\p" str "\r\n" "")
)



搜狗截图20161205015232.png

命令: (setq a (xdrx_getpropertyvalue (entlast) "textstring" t))
"\\A1;abc\\P{\\Lfs\\H0.7x;\\S^af;\\H1.4286x;safs}\\Pafaf{\\H0.7x;\\S3^;}43\\P{\\O\\C32;\\c2648525;faf}"

命令: (XD::MTEXT:UNFORMAT a)
"abc\r\nfsafsafs\r\nafaf343\r\nfaf"

评分

参与人数 1D豆 +10 收起 理由
/db_自贡黄明儒_ + 10 很给力!经验;技术要点;资料分享奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2016-12-7 15:34:03 | 显示全部楼层

感谢老大亲自出马,试了一下,很好用。这段时间去搞VB和api,解决输入法的问题,没来得及全面测试。如果发现有,我会增加的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-12-7 16:36:24 | 显示全部楼层
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2016-12-8 12:00:18 | 显示全部楼层

"2000\\S3^2;"    "2000\\S3^;"上标   "2000\\S^2;"下标
请问N版,上下堆垛去不掉怎么写?
1.png
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-12-8 12:17:34 | 显示全部楼层
本帖最后由 newer 于 2016-12-8 12:36 编辑

弄出这个特例来,

增加一行替换代码

  (if (setq m1 (XD::STRING:RegexpS "(?!\\\\s)([\\u4E00-\\u9FA5A-Za-z0-9]+)(\\^([\\u4E00-\\u9FA5A-Za-z0-9]+);)" str ""))
    (setq str (XD::STRING:RegexpR "(?!\\\\s)([\\u4E00-\\u9FA5A-Za-z0-9]+)(\\^([\\u4E00-\\u9FA5A-Za-z0-9]+);)" str (substr (xd::string:regexpr "\\\\s|\\^|;" (car m1) "" "") 2) "")
          str (xd::string:regexpr "\\\\" str "" ""))
  )

(defun XD::Mtext:UnFormat (str / m1 match)
  (setq match "(\\\\A[0-9]+;)|(\\{)|(\\\\f[\\u4E00-\\u9FA5A-Za-z0-9\\-_ ]+)|(\\|((b|i)[0|1]))|(\\|c[0-9]+)|(\\|p[0-9]+?;)|(\\\\[L|O])|(\\\\H[0-9.]+x;)|(\\\\(Q|T|W|A)[0-9.]+;)|(\\\\c[0-9]+;)|(\\\\F(.*?);)|(\\\\~)|(\\})")
  (setq str (XD::STRING:RegexpR match str "" ""))
  (if (setq m1 (XD::STRING:RegexpS "(?!\\\\s\\^)([\\u4E00-\\u9FA5A-Za-z0-9]+)(?=;)" str ""))
    (setq str (XD::STRING:RegexpR "\\\\s\\^([\\u4E00-\\u9FA5A-Za-z0-9]+);" str (car m1) ""))
  )
  (if (setq m1 (XD::STRING:RegexpS "(?!\\\\s)([\\u4E00-\\u9FA5A-Za-z0-9]+)(?=\\^;)" str ""))
    (setq str (XD::STRING:RegexpR "\\\\s([\\u4E00-\\u9FA5A-Za-z0-9]+)\\^;" str (substr (car m1) 2) ""))
  )
  (if (setq m1 (XD::STRING:RegexpS "(?!\\\\s)([\\u4E00-\\u9FA5A-Za-z0-9]+)(\\^([\\u4E00-\\u9FA5A-Za-z0-9]+);)" str ""))
    (setq str (XD::STRING:RegexpR "(?!\\\\s)([\\u4E00-\\u9FA5A-Za-z0-9]+)(\\^([\\u4E00-\\u9FA5A-Za-z0-9]+);)" str (substr (xd::string:regexpr "\\\\s|\\^|;" (car m1) "" "") 2) "")
          str (xd::string:regexpr "\\\\" str "" ""))
  )
  (XD::STRING:RegexpR "\\\\p" str "\r\n" "")
)


命令: (XD::MTEXT:UNFORMAT str)
"200032"

评分

参与人数 1D豆 +5 收起 理由
/db_自贡黄明儒_ + 5 增得巧妙

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2016-12-8 13:25:41 | 显示全部楼层
本帖最后由 /db_自贡黄明儒_ 于 2016-12-8 13:42 编辑

对于单行文字,似乎下面就够了
(defun XD::Text:UnFormat (str / m1 match)
  (setq match "%%o|%%O|%%U|%%u|%%140|%%141|%%142|%%143")
  (XD::String:Replace match str "" "")
)


但实际上,有时entget得到的是Unicode 字符串,如何去除?
"钢板 \\U+03b410*150*150"去掉\\U+03b4
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-23 13:15 , Processed in 0.500678 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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