大话正则表达式

概念

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑,使用正则表达式,能快速精准的查找符合“复杂条件”的子字符串,在项目中应用较广,比如可以用来检验参数合法性,查找与替换,提取句中复杂子串等;

正则基础

工欲善其事,必先利其器,使用之前,我们必须知道正则的一些基础语法,然后才能在必要时刻发挥出大杀器,语法主要包括:

^:开头匹配,或用于在集合中表示“除了”,如表示字符串中除了1,2都匹配;

$:结尾匹配,比如我们匹配以数字开头,已字符结束的一段话可以用:

匹配一个数字,匹配一个字符数字下划线的组合,匹配一个空字符,包括空格,制表符或换页符,匹配任意一个字符,匹配一个制表符,,,大写的表示,,的取反

:表示重复n次,比如:匹配1~3位连续数字,区间[1,3]都是闭区间,匹配1位或1位以上连续数字,比如匹配手机号:;

*:0或0次以上,相当于

+:1或1次以上,相当于

?:0次或1次,相当于

请记住,一般在一个语法定义中,比较常用的用法都有相应的“语法糖”,在我们模式匹配复杂子串时,是最常用的匹配次数

():括号用于分组,非常重要,可以反向匹配前面已匹配的子串作为后续处理,在处理复杂子串匹配时,非常重要;

|:任选其一

(?=表达式):预判断,整个字符串是否符合表达式

(?!表达式):预判断,整个字符串是否不符合表达式

需要转移的符号包括:

贪婪和懒惰模式:默认采用最大匹配(尽可能匹配符合条件的最多子串),针对*,+,?限定符,如果在这些符号后面加入?则表示非贪婪的最小匹配,如匹配1个或1个以上连续0,在字符串中它匹配,如果变成则匹配到三条记录,每个都是0;

贪婪和懒惰模式特例::懒惰模式,长度为N的字符串匹配到N条单字符记录,匹配整个字符串,比如字符串:,使用匹配到,贪婪和懒惰模式匹配是正则中比较重要的概念;

项目案例分析

有了上文的基础知识后,在实际应用中,还需要多练多看多学,才能得心应手,下文我们通过一个报价识别程序介绍正则用法,以下是样本数据:

需求描述:

识别出机构,如民泰银行等;

识别出收益率:如4.72%,4.85等;

识别出评级,如:AA+,AAA等;

识别出期限,如一个月,1Y等,并规整为:3M,1Y,30D格式

解决思路:

利用一个责任链模式,将以上四个指标的识别指标添加到责任链中;

为了提高识别率,已识别出的文字段直接截掉,如 周一发,识别出收益率4.35%后,后续字符串处理直接变成

利用正则表达式,将更容易精准识别的算法放到最前面过滤,如下:

正则识别定义:

评级识别:在一段话中我们需要识别评级,评级包括AA-,AA,AA+,AAA,AAA-,AAA+等,这个正则要怎么来写呢?首先我们应该使用贪婪模式,即AAA不能识别出AA就结束,另外A不区分大小写,有个这个思路,我们就可以写出正则:

机构识别:全子串匹配,要特别注意的是某些字符可以不输入,如银行,分行等;

期限识别:期限可能有中文或数字,数字可以有小数,如1.23Y,所以正则定义可以为:

收益率识别:不大于10的小数,可不带百分号,这个比较简单:

注:线上正则调测工具使用:https://tool.lu/regex/

关注我们的公众号

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180804G1G7KB00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券