乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 15|回复: 15

[编程交流] 分析字符串

[复制链接]

22

主题

100

帖子

78

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
112
发表于 2022-7-6 10:07:44 | 显示全部楼层 |阅读模式
你好全部的
如果我想在一个大字符串中获取/覆盖一些特殊的子字符串。做这件事最有效/最容易的是什么。
例如
我有一个字符串{\H1.1429x;φ}{\H0.7x;\S+0.1^-0.2;\H1.4286x;\C1;(小)}
 
然后我想得到蓝色部分的子串。或者用“替换”覆盖蓝色部分,什么
我应该这样做吗?谢谢
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:13:49 | 显示全部楼层
可能使用正则表达式
回复

使用道具 举报

22

主题

100

帖子

78

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
112
发表于 2022-7-6 10:17:01 | 显示全部楼层
@李。谢谢,我会深入研究的。
回复

使用道具 举报

22

主题

100

帖子

78

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
112
发表于 2022-7-6 10:23:38 | 显示全部楼层
嗨,李
经过一些研究,我使用以下代码来获得值“+0.1”和“-0.2”,但它失败了,有任何评论吗??
  1. (defun c:tt(/)
  2.         (vl-load-com)
  3. (setq regex (vlax-create-object "Vbscript.RegExp"))
  4. (vlax-put-property regex "IgnoreCase" 0)
  5. (vlax-put-property regex "Global" 1)
  6. (vlax-put-property regex "Pattern" "\\\\S(.*)(\\^|#|\\\\)(.*);")
  7. (setq string "{\H1.1429x;φ}<>{\H0.7x;\S+0.1^-0.2;\H1.4286x;\C1;(small)}")
  8. (setq result (vlax-invoke-method regex "Execute" string))
  9. (vlax-for x result
  10.         (setq match (vlax-get x 'Value)
  11.                         idx  (valx-get x 'FirstIndex)
  12.                         lst (cons (list match idx) lst)
  13.         )
  14. )
  15. lst
  16. )
回复

使用道具 举报

22

主题

100

帖子

78

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
112
发表于 2022-7-6 10:27:32 | 显示全部楼层
好的,这是令人惊讶的代码。
但它返回匹配的字符串\\S+0.1^-0.2;
如果我只想得到“+0.1”和“-0.2”,我该怎么办?
 
  1. (defun c:tt(/ regex lst)
  2.         (vl-load-com)
  3. (setq regex (vlax-create-object "Vbscript.RegExp"))
  4. (vlax-put-property regex "IgnoreCase" 0)
  5. (vlax-put-property regex "Global" 1)
  6. (vlax-put-property regex "Pattern" "\\\\S(.[^;]*)(\\^)(.[^;]*);")
  7. (setq string "{\H1.1429x;φ}<>{\H0.7x;\\S+0.1^-0.2;\H1.4286x;\C1;(small)}")
  8. (setq result (vlax-invoke-method regex "Execute" string))
  9. (vlax-for x result
  10.         (setq match (vlax-get x 'Value)
  11.                         idx  (vlax-get x 'FirstIndex)
  12.                         lst (cons (list match idx) lst)
  13.         )
  14. )
  15. lst
  16. (vlax-release-object regex)
  17.        
  18. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:28:28 | 显示全部楼层
我不太擅长常规表达,但也许这更接近?
 
  1. (defun c:tt ( / *error* regex str )
  2. (vl-load-com)
  3. (setq str "{\H1.1429x;?}<>{\H0.7x;\\S+0.1^-0.2;\H1.4286x;\C1;(small)}")
  4. (defun *error* ( msg )
  5.    (LM:ReleaseObject regex)
  6.    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
  7.        (princ (strcat "\n** Error: " msg " **")))
  8.    (princ)
  9. )
  10. (setq regex (vlax-create-object "VBScript.RegExp"))
  11. (setq str (caar (LM:RegExExecute regex "\\\\S.[^;]*\\^.[^;]*;" str)))
  12. (print (LM:RegExExecute regex "[^S]*\\^[^;]*" str))
  13. (LM:ReleaseObject regex)
  14. (princ)
  15. )
  16. (defun LM:RegExExecute ( regex pat str / l )
  17. ;; © Lee Mac 2010
  18. (mapcar
  19.    (function
  20.      (lambda ( prop value ) (vlax-put-property regex prop value))
  21.    )
  22.   '(pattern global ignorecase) (list pat actrue acfalse)
  23. )
  24. (vlax-for x (vlax-invoke regex 'execute str)
  25.    (setq l (cons (list (vlax-get x 'value) (vlax-get x 'firstindex)) l))
  26. )
  27. (reverse l)
  28. )
  29. ;;------------------=={ Release Object }==--------------------;;
  30. ;;                                                            ;;
  31. ;;  Releases a VLA Object from memory via plentiful error     ;;
  32. ;;  trapping                                                  ;;
  33. ;;------------------------------------------------------------;;
  34. ;;  Author: Lee McDonnell, 2010                               ;;
  35. ;;                                                            ;;
  36. ;;  Copyright © 2010 by Lee McDonnell, All Rights Reserved.   ;;
  37. ;;  Contact: Lee Mac @ TheSwamp.org, CADTutor.net             ;;
  38. ;;------------------------------------------------------------;;
  39. ;;  Arguments:                                                ;;
  40. ;;  obj - VLA Object to be released from memory               ;;
  41. ;;------------------------------------------------------------;;
  42. ;;  Returns:  T if Object Released, else nil                  ;;
  43. ;;------------------------------------------------------------;;
  44. (defun LM:ReleaseObject ( obj )
  45. (vl-load-com)
  46. ;; © Lee Mac 2010
  47. (and obj (eq 'VLA-OBJECT (type obj)) (not (vlax-object-released-p obj))
  48.    (not
  49.      (vl-catch-all-error-p
  50.        (vl-catch-all-apply
  51.          (function vlax-release-object) (list obj)
  52.        )
  53.      )
  54.    )
  55. )
  56. )
回复

使用道具 举报

22

主题

100

帖子

78

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
112
发表于 2022-7-6 10:32:37 | 显示全部楼层
最后一个。
  1. (defun c:tt ( / *error* regex str )
  2. (vl-load-com)
  3. (setq str "{\H1.1429x;?}<>{\H0.7x;\\S+0.1^-0.2;\H1.4286x;\C1;(small)}")
  4. (defun *error* ( msg )
  5.    (LM:ReleaseObject regex)
  6.    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
  7.        (princ (strcat "\n** Error: " msg " **")))
  8.    (princ)
  9. )
  10. (setq regex (vlax-create-object "VBScript.RegExp"))
  11. (setq str (caar (LM:RegExExecute regex "\\\\S.[^;]*\\^.[^;]*;" str)))
  12. (setq str (caar (LM:RegExExecute regex "[^S]*\\^[^;]*" str)))
  13. (print (LM:RegExExecute regex "[^\\^]+" str))
  14. (LM:ReleaseObject regex)
  15. (princ)
  16. )
  17. (defun LM:RegExExecute ( regex pat str / l )
  18. ;; ? Lee Mac 2010
  19. (mapcar
  20.    (function
  21.      (lambda ( prop value ) (vlax-put-property regex prop value))
  22.    )
  23.   '(pattern global ignorecase) (list pat actrue acfalse)
  24. )
  25. (vlax-for x (vlax-invoke regex 'execute str)
  26.    (setq l (cons (list (vlax-get x 'value) (vlax-get x 'firstindex)) l))
  27. )
  28. (reverse l)
  29. )
  30. ;;------------------=={ Release Object }==--------------------;;
  31. ;;                                                            ;;
  32. ;;  Releases a VLA Object from memory via plentiful error     ;;
  33. ;;  trapping                                                  ;;
  34. ;;------------------------------------------------------------;;
  35. ;;  Author: Lee McDonnell, 2010                               ;;
  36. ;;                                                            ;;
  37. ;;  Copyright ? 2010 by Lee McDonnell, All Rights Reserved.   ;;
  38. ;;  Contact: Lee Mac @ TheSwamp.org, CADTutor.net             ;;
  39. ;;------------------------------------------------------------;;
  40. ;;  Arguments:                                                ;;
  41. ;;  obj - VLA Object to be released from memory               ;;
  42. ;;------------------------------------------------------------;;
  43. ;;  Returns:  T if Object Released, else nil                  ;;
  44. ;;------------------------------------------------------------;;
  45. (defun LM:ReleaseObject ( obj )
  46. (vl-load-com)
  47. ;; ? Lee Mac 2010
  48. (and obj (eq 'VLA-OBJECT (type obj)) (not (vlax-object-released-p obj))
  49.    (not
  50.      (vl-catch-all-error-p
  51.        (vl-catch-all-apply
  52.          (function vlax-release-object) (list obj)
  53.        )
  54.      )
  55.    )
  56. )
  57. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:36:41 | 显示全部楼层
很高兴你最后到了那里
 
不过,它可能需要更多的错误捕捉。。。
回复

使用道具 举报

22

主题

100

帖子

78

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
112
发表于 2022-7-6 10:43:26 | 显示全部楼层
嗨,李:
我找到了另一种更好的方法来获得价值。
代码如下。
 
  1. (defun c:tt(/ regex lst)
  2.         (vl-load-com)
  3. (setq regex (vlax-create-object "Vbscript.RegExp"))
  4. (vlax-put-property regex "IgnoreCase" 0)
  5. (vlax-put-property regex "Global" 1)
  6. ;
  7. (vlax-put-property regex "Pattern" ".*\\\\S(.[^;]*)[\\^](.[^;]*);.*")
  8. (setq string "<>{\H0.7x;\\S+0.3^+0.5;}")
  9. (setq tp (vlax-invoke-method regex "Replace" string "$1"))
  10.         (setq tm (vlax-invoke-method regex "Replace" string "$2"))
  11.         (princ tp)
  12.    (princ tm)
  13. (vlax-release-object regex)
  14.        
  15. )
回复

使用道具 举报

22

主题

100

帖子

78

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
112
发表于 2022-7-6 10:46:00 | 显示全部楼层
基于同一个故事。
但它未能满足以下代码。你知道这个吗???
  1. (defun c:tt(/ regex lst)
  2.         (vl-load-com)
  3. (setq regex (vlax-create-object "Vbscript.RegExp"))
  4. (vlax-put-property regex "IgnoreCase" 0)
  5. (vlax-put-property regex "Global" 1)
  6. ;
  7. (vlax-put-property regex "Pattern" ".*%%P(\d*[\\\\.]?\d*).*")
  8. (setq string "<>%%P0.05")
  9. (setq tp (vlax-invoke-method regex "Replace" string "$1"))
  10.         ;(setq tm (vlax-invoke-method regex "Replace" string "$2"))
  11.         (princ tp)
  12.    ;(princ tm)
  13. (vlax-release-object regex)
  14.        
  15. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-6 21:06 , Processed in 0.575995 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表