概念
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑,使用正则表达式,能快速精准的查找符合“复杂条件”的子字符串,在项目中应用较广,比如可以用来检验参数合法性,查找与替换,提取句中复杂子串等;
正则基础
工欲善其事,必先利其器,使用之前,我们必须知道正则的一些基础语法,然后才能在必要时刻发挥出大杀器,语法主要包括:
^:开头匹配,或用于在集合中表示“除了”,如表示字符串中除了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/
关注我们的公众号
领取专属 10元无门槛券
私享最新 技术干货