明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1465|回复: 7

[已解答] 悬赏30币,如何删除括号后的字符

[复制链接]
发表于 2016-1-13 14:16 | 显示全部楼层 |阅读模式
30明经币
悬赏30币,如何删除括号后的字符,和括号前的字符,如123(2)455,删除括号后的字符为123(2),删除括号前的字符为455

最佳答案

发表于 2016-1-13 14:16 | 显示全部楼层

  1. (defun c:tt ()
  2.         (setq ss(ssget '((0 . "*TEXT"))))
  3.         (setq en-list(try-ss2EnList ss))
  4.         (foreach n en-list (try-set-dxf n 1 (sut(try-get-dxf n 1))))
  5. )
  6. (defun sut (str)
  7.   (substr str 1 (1+ (vl-string-search ")" str)))
  8. )
  9. (defun try-ss2EnList(ss / a en lst)
  10.         (if ss(progn(setq a -1)
  11.                                         (while(setq en(ssname ss(setq a(1+ a))))
  12.                                                 (setq lst(cons en lst)))))
  13.         lst)
  14. (defun try-set-dxf (ename code val / ent x y i s1);注:原创为:xpy院长
  15.         (cond ((= (type ename) 'ENAME)
  16.                                         (setq ent (entget ename))
  17.                                         (if (and (= (type code) 'LIST) (= (type val) 'LIST))
  18.                                                 (mapcar '(lambda (x y) (try-set-dxf ename x y)) code val)
  19.                                                 (progn
  20.                                                         (if (try-get-dxf ename code)
  21.                                                                 (entmod (subst (cons code val) (assoc code ent) ent))
  22.                                                                 (entmod (append ent (list (cons code val))))
  23.                                                         )
  24.                                                         (entupd ename)
  25.                                                 )
  26.                                         )
  27.                                 )
  28.                 ((= (type ename) 'PICKSET)
  29.                         (setq i -1)
  30.                         (while (setq s1 (ssname ename (setq i (1+ i))))
  31.                                 (try-set-dxf s1 code val)
  32.                         )
  33.                 )
  34.                 ((= (type ename) 'LIST)
  35.                         (foreach s1 ename (try-set-dxf s1 code val))
  36.                 )
  37.         )
  38.         ename
  39. )
  40. (defun try-get-dxf (en code )
  41.         (cond ((= (type en) 'ENAME)
  42.                                         (cdr (assoc code (entget en))))
  43.                 ((= (type en) 'list)
  44.                         (mapcar '(lambda(x)(try-get-dxf x code)) en))
  45.                 ((= (type en) 'PICKSET)
  46.                         (try-get-dxf (try-ss2EnList en)code))
  47.         )
  48. )
回复

使用道具 举报

发表于 2016-1-13 14:36 | 显示全部楼层
本帖最后由 aihuyujian 于 2016-1-13 14:41 编辑

(substr "123(2)455" 1 (+ (vl-string-search ")" "123(2)455") 2)) ;中文括号------------"123(2)"
(substr "123(2)455" 1 (+ (vl-string-search ")" "123(2)455") 1)) ;英文括号------------"123(2)"
(substr "123(2)455" (+ (vl-string-search ")" "123(2)455") 3)) ;中文括号------------"455"
(substr "123(2)455" (+ (vl-string-search ")" "123(2)455") 2)) ;英文括号------------"455"
回复

使用道具 举报

发表于 2016-1-13 14:43 | 显示全部楼层
(defun LM:getfiles:str->lst ( str del / pos )
    (if (setq pos (vl-string-search del str))
        (cons (substr str 1 pos) (LM:getfiles:str->lst (substr str (+ pos 1 (strlen del))) del))
        (list str)
    )
)

(defun c:kk()
(car (LM:getfiles:str->lst  "123(2)455" ")"))
  )
回复

使用道具 举报

发表于 2016-1-13 15:21 | 显示全部楼层
(vl-string-right-trim "1234567890" "123(2)455")
====>"123(2)"
回复

使用道具 举报

发表于 2016-1-13 15:53 | 显示全部楼层
  1. (defun c:tt (/ box data data2 en-list pt10 pt10-2 pt11 pt11-2 ss str txt1 txt2)
  2.   (setq ss(ssget '((0 . "*TEXT"))))
  3.   (setq en-list(try-ss2EnList ss))
  4.   ;(setq n (entselx))
  5.   (foreach n en-list
  6.     (try-set-dxf n 1 (setq txt1(sut1(setq str(try-get-dxf n 1)))))
  7.     (setq
  8.       data(entget n)
  9.       pt10(try-get-dxf n 10)
  10.       pt11(try-get-dxf n 11)
  11.       box(textbox (subst (cons 1 (strcat "----" txt1))(cons 1 txt1)data))
  12.       txt2(sut2 str)
  13.       pt10-2 (mapcar '+ (list (car(cadr box))0)pt10)
  14.       pt11-2 (mapcar '+ (list (car(cadr box))0)pt11)
  15.       data2(cdr data)
  16.       data2(subst (cons 10 pt10-2)(cons 10 pt10)data2)
  17.       data2(subst (cons 11 pt11-2)(cons 11 pt11)data2)
  18.       data2(subst (cons 1 txt2)(cons 1 txt1)data2)
  19.       
  20.     )
  21.     (entmakex data2)
  22.   )
  23. )
  24. (defun c:tt2 (/ en-list ss)
  25.   (setq ss(ssget '((0 . "*TEXT"))))
  26.   (setq en-list(try-ss2EnList ss))
  27.   (foreach n en-list (try-set-dxf n 1 (sut1(try-get-dxf n 1))))
  28. )


  29. (defun sut1(str / x)
  30.   (setq x(car(try-StrRegExp str "[^\\))]+[\\))]")))
  31.   (if x x str)
  32. )
  33. (defun sut2(str / x)
  34.   (setq x(last(try-StrRegExp str "[^\\))]+")))
  35.   (if x x str)
  36. )


  37. (defun try-ss2EnList(ss / a en lst)
  38.   (if ss(progn(setq a -1)
  39.           (while(setq en(ssname ss(setq a(1+ a))))
  40.             (setq lst(cons en lst)))))
  41.   lst)
  42. (defun try-set-dxf (ename code val / ent x y i s1);注:原创为:xpy院长
  43.   (cond ((= (type ename) 'ENAME)
  44.           (setq ent (entget ename))
  45.           (if (and (= (type code) 'LIST) (= (type val) 'LIST))
  46.             (mapcar '(lambda (x y) (try-set-dxf ename x y)) code val)
  47.             (progn
  48.               (if (try-get-dxf ename code)
  49.                 (entmod (subst (cons code val) (assoc code ent) ent))
  50.                 (entmod (append ent (list (cons code val))))
  51.               )
  52.               (entupd ename)
  53.             )
  54.           )
  55.         )
  56.     ((= (type ename) 'PICKSET)
  57.       (setq i -1)
  58.       (while (setq s1 (ssname ename (setq i (1+ i))))
  59.         (try-set-dxf s1 code val)
  60.       )
  61.     )
  62.     ((= (type ename) 'LIST)
  63.       (foreach s1 ename (try-set-dxf s1 code val))
  64.     )
  65.   )
  66.   ename
  67. )
  68. (defun try-get-dxf (en code )
  69.   (cond ((= (type en) 'ENAME)
  70.           (cdr (assoc code (entget en))))
  71.     ((= (type en) 'list)
  72.       (mapcar '(lambda(x)(try-get-dxf x code)) en))
  73.     ((= (type en) 'PICKSET)
  74.       (try-get-dxf (try-ss2EnList en)code))
  75.   )
  76. )
  77. (defun try-StrRegExp(str1 expr)
  78.   (_Replace str1 expr nil "")
  79. )
  80. (defun _Replace(str1 str2 bull str3 / lst matchcollect reg)
  81.   (setq lst '())
  82.   (setq reg (vlax-create-object "vbscript.regexp")) ;创建正则表达式
  83.   (if (null reg)(progn(alert "发现系统vbscript没有注册,现尝试对其注册")(command"shell" "regsvr32 vbscript.dll")(setq reg (vlax-create-object "vbscript.regexp"))))
  84.   (vlax-put-property reg 'global -1) ;是否匹配全部 (-1是 ,0 不是)
  85.   (vlax-put-property reg 'Multiline -1);是否多行匹配 (-1是 ,0 不是)
  86.   (vlax-put-property reg 'IgnoreCase -1);是否忽略大小写 (-1是 ,0 不是)
  87.   (vlax-put-property reg 'pattern str2);lisp \\
  88.   ;;;   1.(vlax-invoke-method reg 'test str)判断字符串是否与正则表达式匹配
  89.   (if (vlax-invoke-method reg 'test str1)
  90.     ;;;   2.(vlax-invoke-method reg 'Execute str)生成匹配集合   
  91.     (progn (setq matchcollect (vlax-invoke-method reg 'Execute str1))
  92.       ;;;   3.打印匹配的每个集合元素的value   
  93.       (vlax-for match_item matchcollect (setq lst(cons(eval (vlax-get-property match_item 'value))lst)))
  94.     )
  95.   )
  96.   ;;;   4.替换匹配的值  (vlax-invoke-method reg 'Replace str "replace")  生成str副本   
  97.   (setq lst(reverse lst))
  98.   (if bull
  99.     (setq lst(vlax-invoke-method reg 'Replace str1 str3)))
  100.   ;;;  ----------------- end 正则表达式方法
  101.   (vlax-release-object reg);释放内存
  102.   lst
  103. )

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2016-1-14 08:37 | 显示全部楼层
原创为:xpy院长
院长看到这个该生气了。
回复

使用道具 举报

发表于 2018-9-4 17:07 | 显示全部楼层
删除括号,和括号内的文字。怎么改?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 20:59 , Processed in 0.487415 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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