如何删除多行文字中特定类型的字符?
如下图:如何删除多行文字中特定类型的字符?
删除多行文字中的公差,公差值的颜色和字高不是固定的,但都是堆叠的
路过的大师指点一下啦 本帖最后由 1291500406 于 2020-3-10 09:53 编辑
{\\fSimSun|b0|i0|c134|p2;顶板}610×75{\\H0.5x;\\T0.95;\\C201;\\S+0.1^ 0;}×18{\\H0.5x;\\T0.95;\\C201;\\S+0.04^ 0;}
{\\fSimSun|b0|i0|c134|p2;顶板}610×75×18
;;测试
(vla-put-TextString (vlax-ename->vla-object (car (entsel))) "{\\fSimSun|b0|i0|c134|p2;顶板}610×75×18")
{\\fSimSun|b0|i0|c134|p2;顶板}610×75×18
移除定位字符串{\\H0.5x;\\T0.95;\\C201;\\S+0.04^ 0;}部分数据
_$ (vl-string-position (ascii"z") "azbdc")1_$ (vl-string-position 122"azbzc")1_$ (vl-string-position (ascii"x") "azbzc")nil The search string used in the following example contains two “z” characters. Reading from left to right, with the first character being displacement 0, there is one z at displacement 1 and another z at displacement 3: _$ (vl-string-position (ascii"z") "azbzlmnqc")1
Searching from left to right (the default), the “z” in position 1 is the first one vl-string-position encounters. But when searching from right to left, as in the following example, the “z” in position 3 is the first one encountered: _$ (vl-string-position (ascii"z") "azbzlmnqc" nil t)3
1291500406 发表于 2020-3-9 21:32
{\\fSimSun|b0|i0|c134|p2;顶板}610×75{\\H0.5x;\\T0.95;\\C201;\\S+0.1^ 0;}×18{\\H0.5x;\\T0.95;\\C201 ...
太深奥了,看不懂啊
我发现,如果不理会汉字部分,只要把 {} 成对的 大括弧 里面的所有字符以及大括弧本身全部删除,这样应该容易一些吧?是不是要用正则呢? '删除堆迭格式
'RE.Pattern = "\\S(.[^;]*)(\^|#|\\)(.[^;]*);"
's = RE.Replace(s, "$1$3")
'上标下标分开
'RE.Pattern = "\\S(.[^;]*)(\^|#|\\);"
's = RE.Replace(s, "$1")
'RE.Pattern = "\\S\^(.[^;]*);"
's = RE.Replace(s, "$1")
'上下标分数一起
'RE.Pattern = "\\S((.[^;]*)(\^|#|\\)|(\^|#|\\)(.[^;]*));"
用正则相当简单。{}是格式的意思,格式不仅仅是堆叠。 (defun c:tt (/ lst n name str t-string-separated txt)
(defun T-string-separated (str del / lst pos)
(if (/= str nil)
(progn
(while (setq pos (vl-string-search del str))
(setq
lst (cons (substr str 1 pos) lst)
str (substr str (+ pos 1 (strlen del)))
)
)
(reverse (cons str lst))
)
)
)
(if (setq name(car (entsel)))
(progn
(setq txt (vla-get-TextString (vlax-ename->vla-object name)))
(setq lst (T-string-separated txt "}"))
(setq n 0)
(foreach x lst
(if (= n 0)
(setq str (substr x (+ (vl-string-search ";" x) 2)))
(if (vl-string-search "{" x)
(setq str (strcat str (car (T-string-separated x "{"))))
)
)
(setq n (1+ n))
)
)
)
str
) mikewolf2k 发表于 2020-3-10 09:24
'删除堆迭格式
'RE.Pattern = "\\S(.[^;]*)(\^|#|\\)(.[^;]*);"
's = RE.Replace(s ...
谢谢 mikewolf2k 版,以前只在安卓系统的 tasker 里玩过一下正则,语法跟这个一样,只是在lsp里不知道要怎么写,还望多多指教 taoyi0727 发表于 2020-3-10 09:45
(defun c:tt (/ lst n name str t-string-separated txt)
(defun T-string-separated (str del / lst pos ...
非常感谢 taoyi0727 大师的回复,这个效果可以,不知道是否方便改成通用一点的呢,因为公差和汉字的所在位置有时候会不一样 本帖最后由 taoyi0727 于 2020-3-10 11:27 编辑
669423907 发表于 2020-3-10 10:24
非常感谢 taoyi0727 大师的回复,这个效果可以,不知道是否方便改成通用一点的呢,因为公差和汉字的所在 ...
(defun c:tt (/ a ang color distance-pt height high last-name layer lst n name-new-pt name-pt obj pt ss str stylename t-string-separated txt)
(defun T-string-separated (str del / lst pos)
(if (/= str nil)
(progn
(while (setq pos (vl-string-search del str))
(setq
lst (cons (substr str 1 pos) lst)
str (substr str (+ pos 1 (strlen del)))
)
)
(reverse (cons str lst))
)
)
)
(if (and
(setq ss (ssget '((0 . "MTEXT"))))
(setq pt (getpoint "\n请点取插入位置"))
)
(progn
(setq a -1)
(repeat (sslength ss)
(setq obj (vlax-ename->vla-object (ssname ss (setq a (1+ a)))))
(setq name-pt (safearray-value (variant-value (vla-get-InsertionPoint obj))))
(setq color (vla-get-Color obj))
(setq Height (vla-get-Height obj))
(setq Layer (vla-get-Layer obj))
(setq StyleName (vla-get-StyleName obj))
(setq txt (vla-get-TextString obj))
(setq lst (T-string-separated txt "}"))
(setq n 0)
(foreach x lst
(if (= n 0)
(setq str (substr x (+ (vl-string-search ";" x) 2)))
(if (vl-string-search "{" x)
(setq str (strcat str (car (T-string-separated x "{"))))
)
)
(setq n (1+ n))
)
(if (not (and ang distance-pt))
(progn
(setq ang (angle name-pt pt))
(setq distance-pt (distance name-pt pt))
)
)
(setq name-new-pt (polar name-pt ang distance-pt))
(setq last-name (entlast))
(entmake (list
'(0 . "MTEXT")
'(100 . "AcDbEntity")
'(100 . "AcDbMText")
'(7 . "Standard")
(cons 1 str)
(cons 10 name-new-pt)
)
)
(if (/= (entlast) last-name)
(progn
(setq obj (vlax-ename->vla-object (entlast)))
(vla-put-StyleName obj StyleName)
(vla-put-Color obj color)
(vla-put-Height obj Height)
(vla-put-Layer obj Layer)
)
)
)
)
)
)
水平也只有这样了
不会正则
页:
[1]