关于python正则表达式场景收集(一)
近在研究数据质量校验规则,这个规则要确保数据录入的有效性校验,这个靠单纯的SQL或数据库正则表达式难以实现,python正则表达式可以有效解决这个问题,目前还在持续整理中。
记录了一下,re.search和re.match的匹配位置不太一样,通过字典方式形成质量规则,后期再结合数据库数据进行匹配,把这个链路打通。
代码示例
import re
# match()函数只检测RE是不是在string的开始位置匹配,
# search()会扫描整个string查找匹配;
# match()只有在位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none。
re_complex_mobile=re.compile('^(13\d|14[5|7]|15\d|166|17[3|6|7]|18\d)\d{8}$')
re_simple_mobile=re.compile('1[35678]\d{9}')
phone='aa15808909000'
res = re.search(re_simple_mobile, phone)
# <re.Match object; span=(2, 13), match='15808909000'>
res = re.match(re_simple_mobile, phone)
res = re.search(re_complex_mobile, phone)
res = re.match(re_complex_mobile, phone)
# None
mobile='15808909000'
errormobile1='aa15808909000'
errormobile2='158089090000'
telephone='0222-12345678'
email='1500000@139.aa.aa.com'
erroremail='1500000@139.aa.aa.aa.com'
date='2020-02-28'
errordate1='2020-02-30'
errordate2='2020-12-33'
errordate3='3000-02-28'
regex_dict = {'手机号复杂规则':'^(13\d|14[5|7]|15\d|166|17[3|6|7]|18\d)\d{8}$',
'手机号简单规则': '^1[35678]\d{9}$',
'电话号码规则':'^0(\d{2,3})-(\d{6,8})$',
'电子邮件规则':'^([0-9a-zA-Z\_]{0,19})@(([0-9a-zA-Z]{1,13})\.){1,3}([com,cn,net]{1,3})$',
'简单日期规则':'(\d{4}-\d{1,2}-\d{1,2})',
'复杂日期规则':'(19[0-9]{2}|20[0-9]{2})-((0[469]|11)-([012][0-9]|30)|(0[13578]|1[02])-([012][0-9]|3[01])|(02-([01][0-9]|2[0-9])))'}
res = re.search(regex_dict['复杂日期规则'], date)
print(res)
相关文章