明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 518|回复: 18

[提问] 请问提取"【"开始,"】"结束之间的字符串正则怎么写?

[复制链接]
发表于 2024-11-10 11:11:02 | 显示全部楼层 |阅读模式
阳月南飞雁,传闻至此回。【我行殊未已,何日复归来】。【江静潮初落,林昏瘴不开】。明朝望乡处,应见陇头梅。

1、提取结果包含边界符:"【我行殊未已,何日复归来】" 、"【江静潮初落,林昏瘴不开】"
2、提取结果不含边界符:"我行殊未已,何日复归来" 、"江静潮初落,林昏瘴不开"
3、替换结果包含边界符:阳月南飞雁,传闻至此回。【替换字符】。【替换字符】。明朝望乡处,应见陇头梅。
4、替换结果不含边界符:阳月南飞雁,传闻至此回。替换字符。替换字符。明朝望乡处,应见陇头梅。
请教各位大师,这些正则表达式怎么写?
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2024-11-10 14:08:36 | 显示全部楼层
13605 发表于 2024-11-10 13:24
在菜鸟教程上测试的截图

多谢,但还是不行,提示:; 错误: Automation 错误。 没有注册类
不知道咋原因

(defun c:aa( / cTxt expr reg mat matit)
  (setq cTxt "阳月南飞雁,传闻至此回。【我行殊未已,何日复归来】。【江静潮初落,林昏瘴不开】。明朝望乡处,应见陇头")
  ;(setq expr "【.+?】");正确返回:【我行殊未已,何日复归来】、【江静潮初落,林昏瘴不开】
  (setq expr "?<=【).+?(?=】");提示错误:; 错误: Automation 错误
  (setq reg (vlax-create-object "vbscript.regexp"))
  (vlax-put-property reg 'global 1)
  (vlax-put-property reg 'Multiline 1)
  (vlax-put-property reg 'IgnoreCase 0)
  (vlax-put-property reg 'pattern expr)
  (setq mat (vlax-invoke-method reg 'Execute cTxt));生成匹配集合
  (vlax-for matit mat
    (print (eval (vlax-get-property matit 'value)))
  )
  (vlax-release-object reg)
  (print)
)

发表于 2024-11-10 18:24:20 | 显示全部楼层
tender138 发表于 2024-11-10 17:38
谢谢!我想如下结果:
("阳月南飞雁,传闻至此回" "我行殊未已,何日复归来")

  • ;删除字符中多的字符
  • (defun scdgzf (str delim / L1 L2)
  •   (setq  str   (vl-string->list str)  delim (vl-string->list delim) )
  •   (while str
  •     (if  (not (member (car str) delim))
  •       (setq l1 (cons (car str) l1))
  •       (if l1  (setq l2 (cons (vl-list->string (reverse l1)) l2)  l1 nil))
  •     )
  •     (setq str (cdr str))
  •   )
  •   (if l1(setq l2 (cons (vl-list->string (reverse l1)) l2)))
  •   (reverse l2)
  • )
  • 这个函数是在本论坛上找的,原作者不记得了。
  • (defun c:aa(/ lst)
  •   (scdgzf "阳月南飞雁,传闻至此回。【我行殊未已,何日复归来】" "\【\】\。")
  • )
结果 :("阳月南飞雁,传闻至此回" "我行殊未已,何日复归来")
发表于 2024-11-10 16:25:23 | 显示全部楼层
用【(.*?)】可以。
匹配记录1(行1:列13,长度:13):
【我行殊未已,何日复归来】
----------------------------------------------------------------------
  匹配组1(行1:列14,长度:11): 我行殊未已,何日复归来

======================================================================
匹配记录2(行1:列27,长度:13):
【江静潮初落,林昏瘴不开】
----------------------------------------------------------------------
  匹配组1(行1:列28,长度:11): 江静潮初落,林昏瘴不开

======================================================================
发表于 2024-11-10 13:12:38 | 显示全部楼层
正则这种事情肯定问AI啊...
发表于 2024-11-10 13:20:53 | 显示全部楼层
1、【.+?】
2、(?<=【).+?(?=】)
后面两个匹配是一样的,只是把替换内容写进去
发表于 2024-11-10 13:24:24 | 显示全部楼层
在菜鸟教程上测试的截图

本帖子中包含更多资源

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

x
发表于 2024-11-10 14:26:36 | 显示全部楼层
这个好像是因为vbscript.regexp不支持正则表达式的断言 你如果这个句子是固定的可以尝试换一种匹配方式
 楼主| 发表于 2024-11-10 14:50:30 | 显示全部楼层
13605 发表于 2024-11-10 14:26
这个好像是因为vbscript.regexp不支持正则表达式的断言 你如果这个句子是固定的可以尝试换一种匹配方式

谢谢!我再想个其他方法
发表于 2024-11-10 16:30:14 | 显示全部楼层
第1问:(【.*?】)
 楼主| 发表于 2024-11-10 16:37:00 | 显示全部楼层
VBALISPER 发表于 2024-11-10 16:25
用【(.*?)】可以。
匹配记录1(行1:列13,长度:13):
【我行殊未已,何日复归来】

兄弟,还是不行啊,测试可以,但在lisp中就不行,提示:; 错误: Automation 错误。 没有注册类
估计是不支持非贪婪模式
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-22 21:35 , Processed in 0.210244 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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