tender138 发表于 2024-11-10 11:11:02

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

阳月南飞雁,传闻至此回。【我行殊未已,何日复归来】。【江静潮初落,林昏瘴不开】。明朝望乡处,应见陇头梅。

1、提取结果包含边界符:"【我行殊未已,何日复归来】" 、"【江静潮初落,林昏瘴不开】"
2、提取结果不含边界符:"我行殊未已,何日复归来" 、"江静潮初落,林昏瘴不开"
3、替换结果包含边界符:阳月南飞雁,传闻至此回。【替换字符】。【替换字符】。明朝望乡处,应见陇头梅。
4、替换结果不含边界符:阳月南飞雁,传闻至此回。替换字符。替换字符。明朝望乡处,应见陇头梅。
请教各位大师,这些正则表达式怎么写?

tender138 发表于 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)
[*](setqstr   (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 "阳月南飞雁,传闻至此回。【我行殊未已,何日复归来】" "\【\】\。")
[*])
结果 :("阳月南飞雁,传闻至此回" "我行殊未已,何日复归来")

VBALISPER 发表于 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啊...

13605 发表于 2024-11-10 13:20:53

1、【.+?】
2、(?<=【).+?(?=】)
后面两个匹配是一样的,只是把替换内容写进去

13605 发表于 2024-11-10 13:24:24

在菜鸟教程上测试的截图

13605 发表于 2024-11-10 14:26:36

这个好像是因为vbscript.regexp不支持正则表达式的断言 你如果这个句子是固定的可以尝试换一种匹配方式

tender138 发表于 2024-11-10 14:50:30

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

谢谢!我再想个其他方法

VBALISPER 发表于 2024-11-10 16:30:14

第1问:(【.*?】)

tender138 发表于 2024-11-10 16:37:00

VBALISPER 发表于 2024-11-10 16:25
用【(.*?)】可以。
匹配记录1(行1:列13,长度:13):
【我行殊未已,何日复归来】


兄弟,还是不行啊,测试可以,但在lisp中就不行,提示:; 错误: Automation 错误。 没有注册类
估计是不支持非贪婪模式
页: [1] 2
查看完整版本: 请问提取"【"开始,"】"结束之间的字符串正则怎么写?