Java正则表达式 重复字符(串)问题-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

Java正则表达式 重复字符(串)问题

简介: 最近需要处理一些微博文本,需要去除一些重复的中文字串,前一段时间正好用正则表达式匹配来解决微博发布日期的识别问题,所以立马想到用正则表达式解决。

最近需要处理一些微博文本,需要去除一些重复的中文字串,前一段时间正好用正则表达式匹配来解决微博发布日期的识别问题,所以立马想到用正则表达式解决。

先说需求,例如 文本“[好][好][好][开心]”,找出这些字符串;

从最简单的开始,先解决中文的问题,网上找的方法是用字符编码,unicode中汉字的字符编码是\u4E00到\9FA5,所以单个汉字可以用"[\\u4E00-\\u4E00]"表示;

接着就可以开始构造特定模式的字符串了,我遇到的是上面提到的方括号中有单字或双字的模式,尝试结果表示为"(([\\[])([\\u4E00-\\u4E00]{1,2})([\\]]))",解释一下

1. "(\\[)"表示匹配"[";

2. "([\\u4E00-\\u4E00]{1,2})"表示单字或双字的字串;

3. "(\\])"表示匹配"]";

所以整个表示的就是"[汉字单字或双字]";

接着再加上这个字符串的重复次数,和第二个解释中的次数设置同理,尝试结果为"((\\[)([\\u4E00-\\u9FA5a-zA-Z]{1,3})(\\])){3,}",表示汉字,字母,数字构成的1到3长的字符串出现3次及以上的模式,举例如下:

Java程序

public static void main(String[] args) {
	String regex = "((\\[)([\\u4E00-\\u9FA5a-zA-Z]{1,3})(\\])){3,}";
	String input = "[好好好好][好][好][好][好][好][还][还][还][还][w]"
                       +"[W][2][1]FJISIFJOIESNIOHFK[P][C][C][C][C][1][2][3]" 
                       +"cvsdcvsdvcsvs[高兴][开心][尴尬][不开心][发]";
	Pattern pattern = Pattern.compile(regex);
	Matcher matcher = pattern.matcher(input);
		
	while (matcher.find()) 
               System.out.println(matcher.start() + " " + matcher.end() + " " 
                       + matcher.group() + " " + matcher.group(1) + " " + matcher.group(2) 
                       + " " + matcher.group(3) + " " + matcher.group(4));
}

运行结果:

6 39 [好][好][好][好][好][还][还][还][还][w][W] [W] [ W ]
62 77 [P][C][C][C][C] [C] [ C ]
99 119 [高兴][开心][尴尬][不开心][发] [发] [ 发 ]

基本实现了功能,后来想更进一步,想着如何做通用字符串,但深入思考感觉不可行啊,通用的话,就是多次出现的字符串本身无模式要求,也就是我们寻找重复多次的字符串时,任何字符串都可以满足要求,这样的组合就太多了,一个字要考虑重复次数,多个字也要考虑重复次数,这样模式限制就有点太泛化了。我的功能还未实现完全,就是要求方括号中是同样的字符串,但这里只能保证方括号中的为数字字母汉字的有限次组合,要验证找出的结果是否是同一段字符串,只能另写程序了(比如每读入一个字符就测试已读入的字符序列是否是未读入序列的开头,暂时只想到这个),按我正则表达式的思路似乎不可行。

还有几个正则表达式的概念需要清楚,组,重复次数控制,元字符,转义等。

写了短短几行程序,既让我感受到了正则表达式的强大,又感觉自己对正则表达式的理解不深(毕竟刚接触没多久),比如,正则表达式的适用场合,当我查找一个字符串时,我想到了正则表达式,却似乎忘了它最本质的功能-模式匹配,看来自己需要好好理清字符串查找与字符串匹配的含义了。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章
最新文章
相关文章