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
学习中!不错。必强必强