ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

通配符{} 不支持中文吗?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-9-4 01:55 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
例如 我有文字:一二三 一二二三 一三三
查找 一{1,4}三 之后前两个找不到 只找到“一三三”
我想要一和三中间有4个中文之内的都找到 怎么办呢

一*三 是不行的
因为这样的话 不管一和三中间隔了多少内容 都会找到

[ 本帖最后由 rendu2mai 于 2009-9-4 01:56 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-9-4 06:47 | 显示全部楼层
{}是通配符?第一次听说。。
貌似楼主问的是正则,那楼主应该好好的先看看书了,至于本题正则的匹配模式写法可以这样:
一[一-龠]{,4}三

TA的精华主题

TA的得分主题

发表于 2009-9-4 07:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
对于{1,}与@的区别,我始终还不是太清楚,不知能否详细介绍一下它们之间的区别,并附以多个实例讲解一下?

TA的精华主题

TA的得分主题

发表于 2009-9-4 10:38 | 显示全部楼层
其实如用“ 一{1,4}三”就连“一三三”也是找不到的。因为查找代码的意思只是匹配这些字符串:一三、一一三、一一一三和一一一一三。通配符中{1,4}所限定的是它前面的字符,即“一”,而不是其它字符。
如果楼主希望查找的是最小匹配,查找代码可试用“一[一-龥]@三”;如果不是则较麻烦。

至于{1,}与@的区别,通常前者是匹配最大长度的字符串,像正则表达式中的贪婪匹配,后者则相反。对于前者,其后可不用其他字符限定;而后者通常是需要的,否则它是多余的。另外,如果是前者,且其后用了其他字符来限定,则限定字符不应在前者所规定的范围内,否则会导致冲突。就如本例,用“一[一-龥]@三”和“一[一-龥]{1,}”都会有匹配,但“一[一-龥]{1,}三”或“[一-龥]{1,4}三”没有匹配,因“[一-龥]”的字符范围就包含了“三”。

[ 本帖最后由 sylun 于 2009-9-4 10:40 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-9-4 12:36 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-9-4 15:29 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
请教sylun兄,如何来解释下面关于@与{1,}的应用?还不明白其具体用法。
123456789  987654321  741852963  369258147 369874125 159 357 123  4546  9875
查找[0-9]@,找到62个
查找[0-9]{1,},找到10个
1234567890--1234567890--1234567890--1234567890--1234567890
查找:[1-4]{1,},替换为:Y:的结果:(共替换5处)
Y567890--Y567890--Y567890--Y567890--Y567890
查找:[1-4]@,替换为:Y的结果:(共替换20处)
YYYY567890--YYYY567890--YYYY567890--YYYY567890--YYYY567890

TA的精华主题

TA的得分主题

发表于 2009-9-4 16:34 | 显示全部楼层
原帖由 tangqingfu 于 2009-9-4 15:29 发表
请教sylun兄,如何来解释下面关于@与{1,}的应用?还不明白其具体用法。
123456789  987654321  741852963  369258147 369874125 159 357 123  4546  9875
查找[0-9]@,找到62个
查找[0-9]{1,},找到10个
1234567 ...


我想4楼已解释过了。看这句:“对于前者,其后可不用其他字符限定;而后者通常是需要的,否则它是多余的。”
对照本例,因查找代码“[0-9]@”中@后面没有限定字符,所以@是多余的,整个代码相当于[0-9]。不过,这也不是绝对的,有时还会有意外的查找效果。印象中Konggs版曾用一个例外代码,只是记不住在哪了。
我想例子就不用多举了。前面那些只是我自己归纳的一点东西,并非它的全部。通配符的查找替换不是简单几句话就说得清楚的。

TA的精华主题

TA的得分主题

发表于 2009-9-4 22:03 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
请教sylun兄:
http://club.excelhome.net/viewth ... 8&highlight=%40
在表达式无后限制时,"{1,}"是贪婪匹配,而"@"是最小匹配。如"1234567890”文本中查找"[0-9]{1,}"时,它返回所有匹配项(1234567890),而查找"[0-9]@"时,它返回"1",它是最小限度匹配。
帖子中守版的解释是否可以这样理解:

如"1234567890”文本中查找"[0-9]{1,}"时,它返回所有匹配项(1234567890)即查找到为1处,也就是1234567890这个值,而查找"[0-9]@"时,它返回"1",即查找到10处,也就是0、1、2、3、4、5、6、7、8、9这十个,它是最小限度匹配。

[ 本帖最后由 tangqingfu 于 2009-9-4 22:07 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-9-4 23:11 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
多少处就多少个匹配。我想老大已经解释得很清楚了。原来汤兄前面的例子是这样来的。

TA的精华主题

TA的得分主题

发表于 2009-9-4 23:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
{1,}和@的异同点
以下是学习守版、sylun兄和卡卡兄关于{1,}和@的异同点的观点后,个人进行组织与提炼,如有错误,请指正:
1、"{1,}"中的最大匹配项数为255,即前一个字符或者表达式的至少1次最多255次的匹配;而"@"没有限制(极限目前未知)。
2、在表达式没有后面后限制时,"{1,}"是贪婪匹配,而"@"是最小匹配。如"1234567890”文本中查找"[0-9]{1,}"时,它返回所有匹配项(1234567890)(共计1处),而查找"[0-9]@"时,它返回"1"(共计10处),它是最小限度匹配。
3、对于前者(即{1,}),其后可以不用其他字符限定;而后者(即@)通常是需要的,否则它是多余的。
4、如果前者(即{1,})后面用了其他字符来限定,注意限定字符不能在前者所规定的范围内,否则会导致冲突;若前后为非同类字符(比如汉字与字母、汉字与数字、字母与数字)时就可用。而@则不会受此限制。
实例1(请参考上面的第2、3点说明)
123456789  987654321  741852963  369258147 369874125 159 357 123  4546  9875
查找“[0-9]{1,}”,共找到10处
查找“[0-9]@ ”,共找到62处
理由:
因为查找代码“[0-9]@”中@后面没有限定字符,所以@是多余的,整个代码相当于[0-9]。
实例2(请参考上面的第4点说明)
中国中国我爱你,就像老鼠爱大米  老婆老婆我爱你,就像老鼠爱大米
用“[一-龥]@我爱你”可以找到2处,即“中国中国我爱你”和“老婆老婆我爱你”;
用“[一-龥]{1,}我爱你”则找不到匹配的项
理由:
“我爱你”这三个汉字均在“一-龥”范围内
实例3(请参考上面的第2点说明)
①1234567890--1234567890--1234567890--1234567890--1234567890
查找:“[1-4]{1,}”,替换为:“Y”:的结果:(共替换5处)
Y567890--Y567890--Y567890--Y567890--Y567890
查找:“[1-4]@”,替换为:“Y”的结果:(共替换20处)
YYYY567890--YYYY567890--“YYYY567890--YYYY567890--YYYY567890
理由:
{1,}"是贪婪匹配,查找:“[1-4]{1,}”,它返回所有匹配项,即查找范围中的连续字符(一个或多个)作为整体后,也就是“1234567890--1234567890--1234567890--1234567890—1234567890”中的蓝色数字部分将其替换为“Y”;
而"@"是最小匹配,即查找中的所有范围内的字符作为个体后(本例即为将“1234567890--1234567890--1234567890--1234567890—1234567890”这些数字作为个体),将其替换为“Y”
②1324657890--2456789031--2516748930--1345672890—1356278904
查找:“[1-4]{1,}”,替换为:“Y”:的结果:(共替换12处)
Y657890--Y567890Y--Y5Y67Y89Y0--Y567Y890--Y56Y7890Y
查找:“[1-4]@”,替换为:“Y”的结果:(共替换20处)
YYYY657890--YY567890YY--Y5Y67Y89Y0--YYY567Y890--YY56Y7890Y
理由:
{1,}"是贪婪匹配,查找:“[1-4]{1,}”, 它返回所有匹配项,即查找范围的连续数字(一个或多个)作为整体后,将其替换为“Y”;即“1324657890--2456789031--2516748930--1345672890--1356278904”中的蓝色部分的数字作为个体后,将其替换为“Y”;
而"@"是最小匹配,即查找中的所有范围内的字符作为个体后(本例即为将“1324657890--2456789031--2516748930--1345672890--1356278904”这些数字作为个体),分别替换为“Y”

[ 本帖最后由 tangqingfu 于 2009-9-5 00:01 编辑 ]

评分

2

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-24 10:50 , Processed in 0.043684 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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