明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 7571|回复: 22

[函数] [源码]正则表达式函数

    [复制链接]
发表于 2015-10-14 16:45:07 | 显示全部楼层 |阅读模式
不知道论坛搜索功能较弱还是怎么,找不到一条正则表达式的函数,不过还是发现了些资料,整理写了两个函数供有需要之人调用。由于写得比较拙,望大神们指点。
注:使用该函数需要有正则表达式的基础,例子为读出字符串中所有的数值,即(“13049.66”“19.574”)

正则使用教程http://bbs.mjtd.com/thread-182083-1-1.html
  1. (setq str "S=13049.66 平方米 合19.574亩")
  2. (try-StrRegExp str "[\\d.]+")
  3. (try-StrRegExpReplace str "[\\d.]+" "替换掉")

  4. ;匹配正则表达式
  5. ;;1、字符串 2、表达式
  6. ;;(setq str "S=13049.66 平方米 合19.574亩")
  7. ;;(try-StrRegExp str "[\\d.]+")
  8. (defun try-StrRegExp(str1 expr)
  9.   (_Replace str1 expr nil "")
  10. )
  11. ;正则表达式字符替换.
  12. ;;1、字符串 2、表达式 3、替换
  13. ;;注:本函数为匹配多行、忽略大小写
  14. ;;(setq str "S=13049.66 平方米 合19.574亩")
  15. ;;(try-StrRegExpReplace str "[\\d.]+" "替换掉")
  16. (defun try-StrRegExpReplace(str1 expr str2)
  17.   (_Replace str1 expr T str2)
  18. )

  19. (defun _Replace(str1 str2 bull str3 / lst matchcollect reg)
  20.   (setq lst '())
  21.   (setq reg (vlax-create-object "vbscript.regexp")) ;创建正则表达式
  22.   
  23.   (vlax-put-property reg 'global -1) ;是否匹配全部 (-1是 ,0 不是)
  24.   (vlax-put-property reg 'Multiline -1);是否多行匹配 (-1是 ,0 不是)
  25.   (vlax-put-property reg 'IgnoreCase -1);是否忽略大小写 (-1是 ,0 不是)
  26.   (vlax-put-property reg 'pattern str2);lisp \\
  27.   ;;;   1.(vlax-invoke-method reg 'test str)判断字符串是否与正则表达式匹配
  28.   (if (vlax-invoke-method reg 'test str1)
  29.     ;;;   2.(vlax-invoke-method reg 'Execute str)生成匹配集合   
  30.     (progn (setq matchcollect (vlax-invoke-method reg 'Execute str1))
  31.       ;;;   3.打印匹配的每个集合元素的value   
  32.       (vlax-for match_item matchcollect (setq lst(cons(eval (vlax-get-property match_item 'value))lst)))
  33.     )
  34.   )
  35.   ;;;   4.替换匹配的值  (vlax-invoke-method reg 'Replace str "replace")  生成str副本   
  36.   (setq lst(reverse lst))
  37.   (if bull
  38.   (setq lst(vlax-invoke-method reg 'Replace str1 str3)))
  39.   ;;;  ----------------- end 正则表达式方法
  40.   (vlax-release-object reg);释放内存
  41.   lst
  42. )


评分

参与人数 6明经币 +6 收起 理由
hubeiwdlue + 1 很给力!
tigcat + 1 很给力!
qiuhai1991 + 1
crazylsp + 1 赞一个!
冰之绝恋 + 1 赞一个!
jltx123456 + 1 神马都是浮云

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2020-7-4 23:56:58 | 显示全部楼层

命令: (try-StrRegExp (atxt) "[\\d.]+")
选择的文字 H型钢H446×199×8×12;L=3990 然后.......
选择对象: ("3990" "712" "00" "78" "00" "7199" "00" "446")
cad2010就是这么任性
嘿嘿 atxt如下定义,测试用得比较多
(defun atxt( / get_txt  )
    (if  (setq ss(entsel));选择单个图元
              (setq get_txt (cdr (assoc 1  (entget (car ss)))))
     )
     get_txt
)
发表于 2022-9-12 21:54:06 | 显示全部楼层
softbird 发表于 2022-9-12 06:36
请问一下楼主,(?

零宽断言autolisp中不支持。
发表于 2020-8-17 20:36:39 来自手机 | 显示全部楼层
在2021下 lispsys 值为1 正则表达式得到结果不是预期的结果 大家有试过么
发表于 2015-10-14 17:01:22 | 显示全部楼层
顶,明经 精神传承, 后继有人啊

评分

参与人数 1明经币 +1 收起 理由
tryhi + 1

查看全部评分

发表于 2015-10-15 08:33:13 | 显示全部楼层
明经的搜索的确有点笨
发表于 2015-10-15 16:34:34 | 显示全部楼层
谢谢分享!!!!!!!!!!!!!!
发表于 2015-10-16 09:20:41 | 显示全部楼层
虽然不懂,但是MARK以备学习
发表于 2017-10-5 20:14:44 | 显示全部楼层
回帖是一种美德!感谢楼主的无私分享 谢谢
发表于 2018-3-15 12:24:50 | 显示全部楼层
真强大,支持楼主
发表于 2018-5-10 11:17:13 | 显示全部楼层
强,在学习正则
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-23 02:29 , Processed in 0.225244 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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