在Java中使用正则表达式处理文本

 在做文本分析时,经常会用到字符串的相关操作,比如IndexOf、substring等,但对于简单的字符串处理还可以,一些相对复杂的处理,往往要写一大堆的代码去实现,有没有比较简洁方便的方案代替呢?正则表达式随之出现。

JDK本身也自带的有正则表达式的处理API,但Apache的Regexp据说更好用,我一向很相信Apache的产品,既然如此就拿来用用吧。首先从Apache网站下载Regexp的jar包,把它导入的工程的CLASSPATH当中。

下面我们实现一个判断字符串是否包含空调功率(几匹)的正则表达式,这个应该很简单,有两种情况:2匹或2.5匹这样子的表达形式,那程序可以这样实现:

     final  String p1 = " /d(./d)?匹 " ;
        
if (msg != null ) {
            
try {
                RE re
=new RE(p1);
                
if(re.match(msg)){
                    String str
=re.getParen(0);
                    
if(str.length()>1){
                        power
=GFString.chinaNum2arebNum(str.substring(0,str.length()-1));
                    }

                }

            }
 catch (RESyntaxException e) {
                e.printStackTrace();
            }

             
        }

此表达式对于像2匹、2.5匹的情况都能处理了,但是实际情况当中可能也会是中文数字,我们增加对中文数字表达方法的支持:

final String p1 = " (/d|[零一二三四五六七八九])([.。点](/d|[零一二三四五六七八九]))?匹“;

现在我们可以支持象:2.5匹、三匹,3。5匹这样子的表达形式了,但现在又有一个新的问题,象22.5匹、f2.5匹这样的情况,该模式也是匹配的,但实际上我们有基本常识的都知道,空调不会超过xx匹,最多也就3匹,5匹,并且x匹前面不应该出现字母的,所以需要进一步的完善:

final  String p1 = " (^|[^/w.。点零一二三四五六七八九])([0-5]|(([0-5]|[零一二三四五])[.。点](/d|[零一二三四五六七八九])))匹 " ;

至此,我们可以很准确地判断出一个文本当中是否含有空调的功率描述,并且可以通过getParen(0)得到它。

参考:

1.Apache Regexp:http://jakarta.apache.org/regexp/index.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值