hhh454 发表于 2020-8-18 23:20:54

一直听说这个,看了看实在是记不住,感谢楼主分享,学无止境

376394482 发表于 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?

1291500406 发表于 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 "[" sted "]")
                lst1 (try-StrRegExp str str2 nil "")
                str4 (car lst1)
                str5 (try-StrRegExp str4 str3 T "")
      )
)
测试
(strbg "工艺图(五十三)" "(" ")")==> "五十三"
(strbg "工艺图(五十三)" "工" "图")==> "艺"
(strbg "工艺图([五十三])""([" "])") ==> "五十三"


恒毅 发表于 2020-8-20 09:27:20

本帖最后由 恒毅 于 2020-8-20 09:54 编辑

搞定了。。

panliang9 发表于 2020-8-20 14:55:33

楼主非常厉害!

guankuiwu 发表于 2020-8-25 10:49:38

学习中!不错。必强必强
页: 1 [2] 3
查看完整版本: 正则表达式详解