删除重复的字符 正则表达式工具 请帮忙 修改 谢谢

wangxuejun1977 2011-02-27 01:38:52
# import java.util.regex.Matcher;
'# import java.util.regex.Pattern;
'# /**
'# *
'# *
'# * <b>类名称:</b>RegexUtil<br/>
'# * <b>类描述:正则表达式工具类</b><br/>
'# * <b>修改时间:</b>Mar 27, 2010 10:46:46 AM<br/>
'# * <b>修改备注:</b><br/>
'# * @version 1.0.0<br/>
'# *
'# */
'# public class RegexUtil {
'# /**
'# *
'# * delRepeat<br/>
'# * 删除重复的字符<br/>
'# * @param str
'# * @return
'# *String
'# * @exception
'# * @since 1.0.0
'# */
'# public static String delRepeat(String str){
'# if(str==null){
'# return null;
'# }
'# Pattern p=Pattern.compile("((.{1,3}?)\\2{2,})");
'# Matcher m=p.matcher(str);
'# while(m.find()){
'# System.out.println("重复的字符:"+m.group(2));
'# System.out.println("整个重复的字符:"+m.group(1));
'# str=str.replace(m.group(1), m.group(2));
'# }
'# return str;
'# }
'#
'# public static void main(String[] args) {
'# String str="开开心心,在我是谁我是谁我是谁好的是是是哈哈,我们我们我们就是我是谁我是谁我是谁哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈";
'# System.out.println(delRepeat(str));
'# }
'# }
'# 运行程序输出:
'# 重复的字符:我是谁
'# 整个重复的字符:我是谁我是谁我是谁
'# 重复的字符:是
'# 整个重复的字符:是是是
'# 重复的字符:我们
'# 整个重复的字符:我们我们我们
'# 重复的字符:我是谁
'# 整个重复的字符:我是谁我是谁我是谁
'# 重复的字符:哈
'# 整个重复的字符:哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
'# 开开心心,在我是谁好的是哈哈,我们就是我是谁哈



请帮助把上诉 代码 改为 vbscript 谢谢了
...全文
217 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
无·法 2011-02-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wangxuejun1977 的回复:]
sysdzw 大侠 问个白痴问题:
(.{1,3}?)\1{2,}
(.{1,}?)\1{1,}
(.{1,}?)\1{2,}

有啥区别?
[/Quote]
.{1,3}表示允许允许重复的字符长度为1~3,也就是“我是谁、是、我们...”这些。
对于字符串“wangwangwang”用(.{1,3}?)\1{2,}是匹配不起来的,因为它最小重复的字符长度是wang,长度为4
对于这个题目来看基本是只要重复即可,所以可以写成“.{1,}?”其实这个就等同于“.+?”了。
后面是?表示非贪婪匹配,不用解释了吧。
\1表示和前面的内容,写在这里表示和前面的内容相同。后面是{2,}表示这个\1至少重复两次以上,加上最前面括号内的也就是重复3次以上。如果写成{1,}也就是整个重复两次以上就行了。
对于“abab”用“(.{1,}?)\1{2,}”是无法匹配的,但是用“(.{1,}?)\1{1,}”是可以匹配的。

根据题目的本意最好还是用(.{1,3}?)\1{2,},不过你的帖子标题应该改成“删除3次重复的字符 ...”

这个是很基础的,有时间多学习学习吧。可以用正则表达式测试工具快速测试比较下看各个表达式不同造成的结果差异。
http://www.symental.com/sfw/regtesttool.zip


wangxuejun1977 2011-02-28
  • 打赏
  • 举报
回复
太感谢了sysdzw 你让我想起了 孔子 诲人不倦 啊
wangxuejun1977 2011-02-27
  • 打赏
  • 举报
回复
给正则盲 扫一下盲吧 十分感谢
wangxuejun1977 2011-02-27
  • 打赏
  • 举报
回复
sysdzw 大侠 问个白痴问题:
(.{1,3}?)\1{2,}
(.{1,}?)\1{1,}
(.{1,}?)\1{2,}

有啥区别?
无·法 2011-02-27
  • 打赏
  • 举报
回复
上面删除的代码稍修改下:
'此代码由“正则测试工具 v1.1.32”自动生成,请直接调用TestReg过程
TestReg
Private Sub TestReg()
Dim strData
Dim reg

strData = "开开心心,在我是谁我是谁我是谁好的是是是哈哈,我们我们我们就是我是谁我是谁我是谁哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈"

Set reg = CreateObject("vbscript.regExp")
reg.Global = True
reg.IgnoreCase = True
reg.MultiLine = True
reg.Pattern = "(.{1,}?)\1{2,}"
strData = reg.Replace(strData, "$1")
msgbox strData
End Sub
输出:
=========================
开开心心,在我是谁好的是哈哈,我们就是我是谁哈
无·法 2011-02-27
  • 打赏
  • 举报
回复
上面是打印重复的,下面是删除的:
'此代码由“正则测试工具 v1.1.32”自动生成,请直接调用TestReg过程
TestReg
Private Sub TestReg()
Dim strData
Dim reg

strData = "开开心心,在我是谁我是谁我是谁好的是是是哈哈,我们我们我们就是我是谁我是谁我是谁哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈"

Set reg = CreateObject("vbscript.regExp")
reg.Global = True
reg.IgnoreCase = True
reg.MultiLine = True
reg.Pattern = "(.{1,}?)\1{1,}"
strData = reg.Replace(strData, "$1")
msgbox strData
End Sub
无·法 2011-02-27
  • 打赏
  • 举报
回复
'此代码由“正则测试工具 v1.1.32”自动生成,请直接调用TestReg过程
TestReg
Private Sub TestReg()
Dim strData
Dim reg
Dim matchs, match
dim s

strData = "开开心心,在我是谁我是谁我是谁好的是是是哈哈,我们我们我们就是我是谁我是谁我是谁哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈"

Set reg = CreateObject("vbscript.regExp")
reg.Global = True
reg.IgnoreCase = True
reg.MultiLine = True
reg.Pattern = "(.{1,3}?)\1{2,}"
Set matchs = reg.Execute(strData)
For Each match In matchs
s=s & "重复的字符:" & match.SubMatches(0) & vbtab & "整个重复的字符:" & match.Value & vbcrlf
Next
msgbox s
End Sub
你应该说肯定结贴。

2,503

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧