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

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

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

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

0818b9ca8b590ca3270a3433284dd417.png

final

String p1

=

"

"

;

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

if

(msg

!=

null

)

...

{

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngtry...{

0818b9ca8b590ca3270a3433284dd417.png                RE re=newRE(p1);

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngif(re.match(msg))...{

0818b9ca8b590ca3270a3433284dd417.png                    String str=re.getParen(0);

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngif(str.length()>1)...{

0818b9ca8b590ca3270a3433284dd417.png                        power=GFString.chinaNum2arebNum(str.substring(0,str.length()-1));

0818b9ca8b590ca3270a3433284dd417.png                    }0818b9ca8b590ca3270a3433284dd417.png                }0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png            }catch(RESyntaxException e)...{

0818b9ca8b590ca3270a3433284dd417.png                e.printStackTrace();

0818b9ca8b590ca3270a3433284dd417.png            }0818b9ca8b590ca3270a3433284dd417.png             

0818b9ca8b590ca3270a3433284dd417.png        }

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

0818b9ca8b590ca3270a3433284dd417.png

final String p1

=

"

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

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

0818b9ca8b590ca3270a3433284dd417.png

final

String p1

=

"

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

"

;

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

参考:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值