明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 1291500406

[经验] 正则表达式详解

    [复制链接]
发表于 2020-8-18 23:20:54 | 显示全部楼层
一直听说这个,看了看实在是记不住,感谢楼主分享,学无止境
发表于 2020-8-19 16:49:04 | 显示全部楼层
谢谢分享!               .
发表于 2020-8-19 17:31:16 | 显示全部楼层
本帖最后由 恒毅 于 2020-8-19 17:37 编辑

根据楼主函数,我写了个提前字符串中中括号内的内容,比如字符串 "工艺图[十二]" 希望提取十二。代码如下
(setq
        str1 "工艺图[十二]"
        str2 "[\[].*[\]]"
        str3 "[\[\]]"
)
(setq
        lst (try-StrRegExp str1 str2 nil "")
  str4 (car lst)
        str5 (try-StrRegExp str4 str3 T "")
)

返回结果确是:[十二]

类似的如果提前小括号内容能够成功:
(setq
        str1 "工艺图(十二)"
        str2 "[\(].*[\)]"
        str3 "[\(\)]"
)
(setq
        lst (try-StrRegExp str1 str2 nil "")
  str4 (car lst)
        str5 (try-StrRegExp str4 str3 T "")
)

能正确返回:十二
WHY?
 楼主| 发表于 2020-8-19 18:37:26 | 显示全部楼层
本帖最后由 1291500406 于 2020-8-19 18:40 编辑
恒毅 发表于 2020-8-19 17:31
根据楼主函数,我写了个提前字符串中中括号内的内容,比如字符串 "工艺图[十二]" 希望提取十二。代码如下
...

(try-StrRegExp "工艺图[十二]" "(\\[[^\\]]*\\])" nil "") -> ("[十二]")

(try-StrRegExp "工艺图(十二)" "[\((][^\))]+[\))]$" nil "")  -> ("(十二)")

发表于 2020-8-20 08:54:38 | 显示全部楼层
1291500406 发表于 2020-8-19 18:37
(try-StrRegExp "工艺图[十二]" "(\\[[^\\]]*\\])" nil "") -> ("[十二]")

(try-StrRegExp "工艺图(十 ...

这个步骤没有问题,下一步要去掉小括号或者中括号  直接得到 十二 ,小括号能去掉 中括号不行。
发表于 2020-8-20 09:05:15 | 显示全部楼层
搞定了 去掉括号如下
(try-StrRegExp "(十二)" "[\(\)]" T "")     成功去掉小括号 返回 十二
(try-StrRegExp "[十二]" "[\\[\\]]" T "")   成功去掉中括号 返回十二
就是不明白为啥[  前面要加两个\
发表于 2020-8-20 09:13:51 | 显示全部楼层
本帖最后由 恒毅 于 2020-8-20 11:54 编辑

;取得某起点(不含)和终点(不含)的字符串间的内容
;str:查询对象
;st :起始字符
;ed: 终止字符
(defun strbg(str st ed / lst1 str2 str3 str4 str5)

        (foreach tmp '("." "^" "$" "*" "+" "?" "{" "}" "(" ")" "|" "[" "]" )
                (setq st (vl-string-subst (strcat (vl-symbol-name '\) tmp) tmp st))
                (setq ed (vl-string-subst (strcat (vl-symbol-name '\) tmp) tmp ed))               
        )
      
        (setq
                str2 (strcat "[" st "]" ".*" "[" ed "]")
                str3 (strcat "[" st  ed "]")
                lst1 (try-StrRegExp str str2 nil "")
                str4 (car lst1)
                str5 (try-StrRegExp str4 str3 T "")
        )
)
测试
(strbg "工艺图(五十三)" "(" ")")  ==> "五十三"
(strbg "工艺图(五十三)" "工" "图")  ==> "艺"
(strbg "工艺图([五十三])"  "([" "])") ==> "五十三"


发表于 2020-8-20 14:55:33 | 显示全部楼层
楼主非常厉害!
发表于 2020-8-25 10:49:38 | 显示全部楼层
学习中!不错。必强必强
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-23 23:51 , Processed in 0.173391 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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