关于python正则表达式场景收集(一)

2020-05-22 00:00:00 数据 规则 专区 位置 匹配

近在研究数据质量校验规则,这个规则要确保数据录入的有效性校验,这个靠单纯的SQL或数据库正则表达式难以实现,python正则表达式可以有效解决这个问题,目前还在持续整理中。

记录了一下,re.search和re.match的匹配位置不太一样,通过字典方式形成质量规则,后期再结合数据库数据进行匹配,把这个链路打通。

代码示例

  1. import re


  2. # match()函数只检测RE是不是在string的开始位置匹配,

  3. # search()会扫描整个string查找匹配;

  4. # match()只有在位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none

  5. re_complex_mobile=re.compile('^(13\d|14[5|7]|15\d|166|17[3|6|7]|18\d)\d{8}$')

  6. re_simple_mobile=re.compile('1[35678]\d{9}')

  7. phone='aa15808909000'

  8. res = re.search(re_simple_mobile, phone)

  9. # <re.Match object; span=(2, 13), match='15808909000'>

  10. res = re.match(re_simple_mobile, phone)

  11. res = re.search(re_complex_mobile, phone)

  12. res = re.match(re_complex_mobile, phone)

  13. # None


  14. mobile='15808909000'

  15. errormobile1='aa15808909000'

  16. errormobile2='158089090000'

  17. telephone='0222-12345678'

  18. email='1500000@139.aa.aa.com'

  19. erroremail='1500000@139.aa.aa.aa.com'

  20. date='2020-02-28'

  21. errordate1='2020-02-30'

  22. errordate2='2020-12-33'

  23. errordate3='3000-02-28'

  24. regex_dict = {'手机号复杂规则':'^(13\d|14[5|7]|15\d|166|17[3|6|7]|18\d)\d{8}$',

  25. '手机号简单规则': '^1[35678]\d{9}$',

  26. '电话号码规则':'^0(\d{2,3})-(\d{6,8})$',

  27. '电子邮件规则':'^([0-9a-zA-Z\_]{0,19})@(([0-9a-zA-Z]{1,13})\.){1,3}([com,cn,net]{1,3})$',

  28. '简单日期规则':'(\d{4}-\d{1,2}-\d{1,2})',

  29. '复杂日期规则':'(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])))'}

  30. res = re.search(regex_dict['复杂日期规则'], date)

  31. print(res)



相关文章