ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1378|回复: 8

[求助] 关于通配符{}的疑问

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-11-25 00:19 | 显示全部楼层 |阅读模式
本帖最后由 流水淘金 于 2014-11-25 00:56 编辑

附件中的内容在word中:
使用“^13([!^13]{35})[。!?”…]”查找,提示有9个匹配的项
使用“^13([!^13]{36})[。!?”…]”查找,提示有2个匹配的项
使用“^13([!^13]{37})[。!?”…]”查找,提示有1个匹配的项

而使用“^13([!^13]{35,37})[。!?”…]”查找,却提示只有1个匹配的项?不是应该是35、36、37的总和吗?排除引号可与句号、惊叹号、问号并存可能导致的重复,匹配项至少也应该是9呀?而不应该是1呀?

我是想用一次性将35、36、37查找出来,表达式应该没错吧?要是错了的话,那正确的应该怎么写呢?

冷冬寒梅.rar

13.64 KB, 下载次数: 27

TA的精华主题

TA的得分主题

发表于 2014-11-25 08:53 | 显示全部楼层
还真没注意过这种通配符,学习下

TA的精华主题

TA的得分主题

发表于 2014-11-26 11:58 | 显示全部楼层
楼主目的是处理断行相连接吗?
如果是可以参考下面的操作:
选择要替换的内容,按下Ctrl+H组合键,打开“替换”对话框,勾选“使用通配符”
查找内容:
([!。:……?!”)])^13{1,}([!0-9])
替换为:
\1\2
全部替换

TA的精华主题

TA的得分主题

发表于 2014-11-26 12:14 | 显示全部楼层
同时满足三个条件,应该匹配项为1吧

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-27 07:00 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
tangqingfu 发表于 2014-11-26 12:14
同时满足三个条件,应该匹配项为1吧

匹配项为什么是1,能告知一下吗?想了很久也没有想通!

TA的精华主题

TA的得分主题

发表于 2014-11-27 21:59 | 显示全部楼层
还是本人给你个满意的解释吧:
说实话,我思考了一天方想出答案。很久前曾参考过守柔老大的帖子:http://club.excelhome.net/thread-449578-3-1.html
当前这个帖子中并未解释你的这个问题。这个帖子只是介绍到了{}代表着贪婪模式,而@代表最小模式。
"{1,}"中的最大匹配项数为255,即前一个字符或者表达式的至少1次最多255次的匹配;而"@"没有限制(极限目前未知)。
在表达式无后限制时,"{1,}"是贪婪匹配,而"@"是最小匹配。如"1234567890”文本中查找"[0-9]{1,}"时,它返回所有匹配项(1234567890),而查找"[0-9]@"时,它返回"1",它是最小限度匹配。
而你的疑问,是,为何^13([!^13]{35})[。!?”…]时能查找到下面的句子,而^13([!^13]{35,37})[。!?”…]却找不到了。
“安静一点。”卓巧丽不耐烦的推顶她一下。“待会儿忙完了,妈妈再带你回家。
其实是这样:{}代表贪婪模式,一旦后面附加了{35,37}的范围,则在查找时^13([!^13]{35,37})部分就直接将后面的句号包含在内了。所以后面的[。!?”…]部分就什么也匹配不到了。
更容易理解的例子:
一二三四关键词一二三四
在查找上面这句时,若使用[!^13]@关键词[!^13]@时,查找到的为一二三四关键词一
也就是说满足@时,长度为1就OK了。不会再继续向后查找。
若使用[!^13]@关键词[!^13]{1,},则可查找到全句。
但是,若修改成这样:[!^13]{1,}关键词[!^13]{1,},则什么也找不到。原因就在于前面的[!^13]{1,}部分已经贪婪的匹配了全句一二三四关键词一二三四,故后面的“关键词”这三个字已经找不到匹配的目标了,导致什么也找不到。
至于LZ的问题,其实个人认为若是想要随心所欲的控制匹配的数量,还是要借助于VBA的。
word本身通配符虽然很强大,几乎堪比正则表达式,但是毕竟不是真正的正则表达式。然而若联合VBA的话,就和真正的正则不相上下了。


TA的精华主题

TA的得分主题

发表于 2014-11-28 07:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
zhanglei1371 发表于 2014-11-27 21:59
还是本人给你个满意的解释吧:
说实话,我思考了一天方想出答案。很久前曾参考过守柔老大的帖子:http://c ...

“查找时^13([!^13]{35,37})部分就直接将后面的句号包含在内了。所以后面的[。!?”…]部分就什么也匹配不到了”

正解!鼓掌!

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-28 13:58 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zhanglei1371 发表于 2014-11-27 21:59
还是本人给你个满意的解释吧:
说实话,我思考了一天方想出答案。很久前曾参考过守柔老大的帖子:http://c ...

多谢给出来的解答...
我当时也觉得可能是通配符贪得太多,而力有所不济...
看样子,为了给出这个解释你倒是费了不小心,感激涕零呀!

TA的精华主题

TA的得分主题

发表于 2014-12-10 18:24 | 显示全部楼层
WORD通配,没办法做到的事多
比如,正则可以匹配0到多次
通配不行,你写的规则至少匹配一次
这在不确定有不有的情况下,得分类写,非常坑的
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-3-29 17:50 , Processed in 0.053393 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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