在做文本分析时,经常会用到字符串的相关操作,比如IndexOf、substring等,但对于简单的字符串处理还可以,一些相对复杂的处理,往往要写一大堆的代码去实现,有没有比较简洁方便的方案代替呢?正则表达式随之出现。
JDK本身也自带的有正则表达式的处理API,但Apache的Regexp据说更好用,我一向很相信Apache的产品,既然如此就拿来用用吧。首先从Apache网站下载Regexp的jar包,把它导入的工程的CLASSPATH当中。
下面我们实现一个判断字符串是否包含空调功率(几匹)的正则表达式,这个应该很简单,有两种情况:2匹或2.5匹这样子的表达形式,那程序可以这样实现:
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1327ab569c1ae82736693a50b8e33378.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)
此表达式对于像2匹、2.5匹的情况都能处理了,但是实际情况当中可能也会是中文数字,我们增加对中文数字表达方法的支持:
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
现在我们可以支持象:2.5匹、三匹,3。5匹这样子的表达形式了,但现在又有一个新的问题,象22.5匹、f2.5匹这样的情况,该模式也是匹配的,但实际上我们有基本常识的都知道,空调不会超过xx匹,最多也就3匹,5匹,并且x匹前面不应该出现字母的,所以需要进一步的完善:
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
至此,我们可以很准确地判断出一个文本当中是否含有空调的功率描述,并且可以通过getParen(0)得到它。
参考:
1.Apache Regexp:http://jakarta.apache.org/regexp/index.html