ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的测验 > Excel VBA > [正则练习题]连续出现单词去重

[正则练习题]连续出现单词去重

作者:绿色风 分类: 时间:2022-08-18 浏览:137
楼主
liuguansky
字符串:just just justso justso sojust just just so so
测试内容:上面全是英文单词,以空格间隔。要求:对连续的单词去重后返回;不可在代码中出现任何循环性语句
得到结果:just justso sojust just so
答题时限:15天

欢迎参与,开题后欢迎讨论。
具体效果如下图所示


 
2楼
kevinchengcw
  1. Sub test3()
  2. Dim RegEx As Object, N&, Str$
  3. Set RegEx = CreateObject("vbscript.regexp")
  4. With RegEx
  5.     .Global = True
  6.     .Pattern = "((^|\b)\w+)\s+(?=\1\b)|(\s)(?=\3)"
  7. End With
  8. Cells(2, 1) = RegEx.Replace(Cells(1, 1).Value, "")
  9. Set RegEx = Nothing
  10. End Sub
有的话继续出
3楼
shun2233
正想学习一下
4楼
xyh9999
哈哈,直接从我excel笔记中的一段复制上来一下,好象半年前或更久些在哪看到过。
1、正则去掉连续重复词符的一种办法

  1. Function del_cf(cSS) '去掉连续重复词符
  2. Dim RegEx As Object
  3.     Set RegEx = CreateObject("VBscript.RegExp")
  4.     With RegEx
  5.         .MultiLine = False
  6.         .Global = True
  7.         .IgnoreCase = True
  8.         .Pattern = "\b(\w+)\b(\s+\1\b)+"
  9.     End With
  10.         del_cf = Trim(RegEx.Replace(cSS, "$1"))
  11.     Set RegEx = Nothing
  12. End Function
2、正则去掉连续重复字符的一种办法(指字符,不是本题要求的,也贴一下。)

  1. Function del_cfzf(cSS) '将连续重复的字符只保留一个
  2. Dim RegEx As Object
  3.     Set RegEx = CreateObject("VBscript.RegExp")
  4.     With RegEx
  5.         .MultiLine = False
  6.         .Global = True
  7.         .IgnoreCase = True
  8.         .Pattern = "(.)(\1)+"
  9.     End With
  10.         del_cfzf = Trim(RegEx.Replace(cSS, "$1"))
  11.     Set RegEx = Nothing
  12. End Function
5楼
xyh9999
想起来了,是四五个月前在 http://www.exceltip.net/thread-10566-3-1.html
中回复问题时写过一些类似的正则的东西。
6楼
raulerini
我也来试试

  1. Sub raulerini()
  2.     Dim myreg As New RegExp, mystr$ '引用regexp 5.5
  3.     myreg.Pattern = "(\b.+\b)\1+"
  4.     myreg.IgnoreCase = False
  5.     myreg.MultiLine = True
  6.     myreg.Global = True
  7.     mystr = [a1].Value
  8.     MsgBox myreg.Replace(mystr, "$1")
  9. End Sub

7楼
wise
  1. Sub test()
  2.     Dim RegEx As Object
  3.     Dim str As String, mystr As String
  4.     str = "just just justso justso sojust just just so so"
  5.     Set RegEx = CreateObject("VBscript.RegExp")
  6.     With RegEx
  7.         .MultiLine = False
  8.         .Global = True
  9.         .IgnoreCase = True
  10.         .Pattern = "\b(\w+)\b(\s+\1\b)+"
  11.     End With
  12.     mystr = RegEx.Replace(str, "$1")
  13.     MsgBox mystr
  14. End Sub
8楼
水星钓鱼
答题过了。我也来试试
  1. Sub AddSymbol()
  2.     Dim oRegExp As Object
  3.     Dim sStr As String
  4.     sStr = "just a a bb abc abc aa abc b b"
  5.     Set oRegExp = CreateObject("vbscript.regexp")
  6.     With oRegExp
  7.         .Global = True
  8.         .Pattern = "([a-zA-Z]+ )\1"
  9.     MsgBox .Replace(sStr & " ", "$1")
  10.     End With
  11. End Sub
9楼
bluexuemei
修改下水星钓鱼的代码:
  1. Sub AddSymbol()
  2.     Dim oRegExp As Object
  3.     Dim sStr As String
  4.     sStr = "just a a a bb abc abc aa abc b b"
  5.     Set oRegExp = CreateObject("vbscript.regexp")
  6.     With oRegExp
  7.         .Global = True
  8.         .Pattern = "([a-zA-Z]+ )\1+"
  9.     MsgBox Trim(.Replace(sStr & " ", "$1"))
  10.     End With
  11. End Sub
10楼
92lvnet3
一定要赞一个才好


11楼
qyote
学习学习
12楼
朱少伎
好我骂你
13楼
谢保威岐
要顶的啊,楼主辛苦了,谢谢

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap