找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 451|回复: 7

[求助] 正则表达式出错了,请老师帮忙看看

[复制链接]
发表于 2018-7-12 23:21:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
  • (defun c:tt (/)
  •   (VL-LOAD-COM)
  •   (setq a "12*sqrt(8)+33.5*9*75.5*34")
  •   (regexpr "(?<=(^|\\(|\\*))\\d+(?=(\\)|\\*|$)" a "$0.0" "")
  • )
  • ;|;; 用正则表达式替换字符
  • 功能 对字符串进行正则表达式替换.
  • 参数:
  • pat = 同xxexp
  • str = 被替换字符串
  • nstr = 替换字符串
  • key = 同xxexp
  • 返回 :返回替换后的字符串.
  • |;
  • (defun RegExpR (pat str nstr key / end)
  •   (VL-LOAD-COM)
  •   (if (not *xxvb**p)
  •     (setq *xxvb**p (vlax-get-or-create-object "VBScript.RegExp"))
  •   )
  •   (vlax-put *xxvb**p 'Pattern pat)
  •   (if (not key)
  •     (setq key "")
  •   )
  •   (setq key (strcase key))
  •   (setq keys '(("I" "IgnoreCase") ("G" "Global")
  •          ("M" "Multiline")
  •         )
  •   )
  •   (mapcar
  •     '(lambda (x)
  •        (if (wcmatch key (strcat "*" (car x) "*"))
  •          (vlax-put *xxvb**p (read (cadr x)) 0)
  •          (vlax-put *xxvb**p (read (cadr x)) -1)
  •        )
  •      )
  •     keys
  •   )
  •   (vlax-invoke *xxvb**p 'replace str nstr)
  • )

最后在40行,提示发生意外,是什么原因呢?

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 20个

财富等级: 恭喜发财

发表于 2018-7-12 23:38:46 | 显示全部楼层
论坛一模一样的代码,如果有问题,就是你的模式串写的不符合规定了
你去看下开源函数库的 xd::string:regexps , 你试试那个。

点评

marting老师,请您帮我看看,如果用XD::String:RegExpR函数,该怎样写Pattern呢?  详情 回复 发表于 2018-7-13 22:00
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2018-7-12 23:39:57 | 显示全部楼层
VBSCRIPT的正则,不支持 (?<=

点评

如果用XD::String:RegExpR函数,该怎样写Pattern呢?  详情 回复 发表于 2018-7-13 13:01
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-7-13 00:13:53 | 显示全部楼层
用API的xdrx_string_regespr ,支持?<=

(defun c:tt (/)
  (setq a "12*sqrt(8)+33.5*9*75.5*34")
  (xdrx_string_regexpr "(?<=(^|\\(|\\*))\\d+(?=(\\)|\\*|$)" a "$0.0")
)
命令: TT
"12.0*sqrt(8.0)+33.5*9.0*75.5*34.0"

点评

如果用XD::String:RegExpR函数,该怎样写Pattern呢?  详情 回复 发表于 2018-7-13 12:27
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-13 12:27:57 | 显示全部楼层
newer 发表于 2018-7-13 00:13
用API的xdrx_string_regespr ,支持?

如果用XD::String:RegExpR函数,该怎样写Pattern呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-13 13:01:18 | 显示全部楼层
marting 发表于 2018-7-12 23:39
VBSCRIPT的正则,不支持 (?

如果用XD::String:RegExpR函数,该怎样写Pattern呢?

点评

XD::String:RegExpR 和你那个是一样的,都是用的VBSCRIPT REGEXP对象,也不支持(?  详情 回复 发表于 2018-7-13 14:00
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-7-13 14:00:18 | 显示全部楼层
wdmzslw 发表于 2018-7-13 13:01
如果用XD::String:RegExpR函数,该怎样写Pattern呢?

XD::String:RegExpR 和你那个是一样的,都是用的VBSCRIPT REGEXP对象,也不支持(?<=....)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-13 22:00:29 | 显示全部楼层
marting 发表于 2018-7-12 23:38
论坛一模一样的代码,如果有问题,就是你的模式串写的不符合规定了
你去看下开源函数库的 xd::string:rege ...

marting老师,请您帮我看看,如果用XD::String:RegExpR函数,该怎样写Pattern呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-27 00:26 , Processed in 0.379258 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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