IT评测·应用市场-qidao123.com

标题: python---正则表达式 [打印本页]

作者: 李优秀    时间: 2024-6-23 12:27
标题: python---正则表达式
==本章目标:

   1:能够知道在Python中利用正则要导入的模块; [相识]
    re模块
2:能够利用re模块匹配单个字符; [重点]
    \d  \w
   正则表达式的概述:

基本介绍

正则表达式,也叫做规则表达式,通常会说成[正则]
实际上正则表达式就是指符合一定规则的字符串,同时他能用于查抄一段文本数据是否与某种模式匹配.
好比,在网站注册新用户时,对用户名,手机号等的验证就利用了正则表达式

在python里有一个专门处理正则表达式的模块:
   #导入模块
  import  re
  在正则表达式中,可以利用单个字符或一段字符串来匹配满意正则规则的文本数据。而我们要学习的,就是正则规则。
   ==总结:==
  (1)正则表达式就是一段具有特别含义的字符串,即正则表达式 == 字符串;
  (2)注意:在Python中,若要操作正则表达式,要利用()模块。==A、re==;B、regex。
  --把握--快速利用re模块

   ==目标:==把握re模块的快速利用。
  我们已经知道,可以利用re模块来操作正则表达式。
re模块常用方法:
函数名含义match(pattern, string)返回一个已匹配乐成的对象。此中,参数pattern表现正则字符串,参数string表现要匹配的内容。 当乐成匹配数据后,效果存放在对象的函数:
函数名含义group(num=0)匹配乐成的内容,num默认是0,表现匹配的所有数据效果。 例如,一起来完成:
(1)利用正则快速验证手机号码是否合格;
(2)验证手机是否合格的条件有:手机号码以1开头且总位数为11位,全部为数字且不包罗其他字符;
(3)根据要求,利用re模块完成对手机号码的验证。

  1. import re
  2. str1 = '13812345678'
  3. regex_str = '1[3456789][0-9]{9}'  # 这种写法没有定义开头结尾限定,只要包含匹配的内容就行
  4. regex_str = '^1[3456789][0-9]{9}$'  # 这种写法佳乐开头结尾限定,必须精准匹配才行
  5. result = re.match(regex_str,str1)  # 判断str1这个字符串是否符合regex_str这个正则规则
  6. if result is not None:
  7.     print('字符串内容符合正则!')
  8.     print(result.group())  # group 表示只获取字符串中匹配上的部分
  9. else:
  10.     print('字符串内容不符合正则!')
复制代码
  ==总结:==
  (1)如果要利用re模块来匹配数据,应该利用re模块的()匹配方法;==A、match()==;B、findall()。
  (2)注意:当利用re模块未匹配到对应的数据时,会返回None。
  正则的常见规则

[把握]匹配单个字符

   ==目标:==把握单个字符的数据匹配。
  常用的匹配单个字符的语法:
代码功能.匹配除\n之外的任何单个字符。[ ]匹配[ ]中罗列的字符。\d匹配一个数字字符,好比[0-9]。\D匹配一个非数字字符,好比[^0-9]。\s匹配任何空白字符。(空格、tab、换行)\S匹配任何非空白字符。\w匹配非特别字符,好比a-z、A-Z、0-9、_、汉字。\W匹配特别字符,好比非字母、非数字、非汉字等。 例如,一起来完成:
(1)利用.来匹配任意单个字符;
(2)利用[a-z]、[A-Z]、[^0-9]分别来查看小写字母、大写字母、非数字;
(3)利用\d来匹配一个数字字符;
(4)利用\w来匹配一个可能有数字、巨细写字母、下划线的单个字符。
  1. # 1.导入模块
  2. import re
  3. # 报错:正则有误;  能输出结果,表示正常
  4. # print(f"结果:{xxx}")
  5. # 2.任意字符
  6. # print(f"结果:{re.match('.','h').group()}")
  7. # print(f"结果:{re.match('.','1').group()}")
  8. # print(f"结果:{re.match('.','_').group()}")
  9. # print(f"结果:{re.match('.','python').group()}")
  10. # 3.小写、大写、非数字
  11. # print(f"结果:{re.match('[a-z]','a').group()}")
  12. # print(f"结果:{re.match('[a-z]','y').group()}")
  13. # print(f"结果:{re.match('[a-z]','Z').group()}")   # 报错
  14. # print(f"结果:{re.match('[a-z]','abc').group()}")
  15. # print(f"结果:{re.match('[A-Z]','B').group()}")
  16. # print(f"结果:{re.match('[0-9]','1').group()}")
  17. # print(f"结果:{re.match('[^0-9]','b').group()}")
  18. # print(re.match('\D','b').group())
  19. # 4.一个数字
  20. # print(f"结果:{re.match('[0-9]','8').group()}")
  21. # print(f"结果:{re.match('[0-9]','66').group()}")
  22. # print(re.match('\d','6').group())
  23. # 5.单字符
  24. # print(re.match('\w','6').group())
  25. # print(re.match('\w','a').group())
  26. # print(re.match('\w','N').group())
  27. # print(re.match('\w','_').group())
  28. # print(re.match('\w','深圳').group())
复制代码
  ==总结:==
  (1)注意:利用匹配单个字符的方式,只能匹配一个字符内容;
  (2)当要匹配除\n外的任何字符,可以利用(.);当要匹配非特别字符(好比字母、数字、下划线或汉字等),可以利用(\w)。A、.;B、\w。
  
[相识]原始字符串

   ==目标:==相识原始字符串的简单利用。
  原始字符串指的是:在所有的正则表达式前,最好加上r,语法:
  1. r"正则表达式"
复制代码
例如,一起来完成:
(1)请利用正则来匹配路径名:E:\\;
(2)请实验利用差异方式去匹配数据,观察效果;
(3)思考:当要定义一段批量文本内容时,该怎么定义字符串?
  1. print('E:\a.txt')    # 这里 会把 \a 当成一个字符, \是转义字符
  2. print('E:\\a.txt')   # \\ 合成 一个  \
  3. print(r'E:\a.txt')   # 前边加 r 表示 字符串中的任何字符没有特殊函数,就是普通字符串,不要过度解读
复制代码
  ==总结:==
  (1)当不想给一段文本数据内容转义而又要表达原始意义时,可以在文本数据内容前添加();A、w;==B、r==。
  (2)注意:当正确写了正则后又匹配不出数据效果时,可以试试在正则前添加r解决标题。
  [把握]匹配多个字符

   ==目标:==把握多个字符的数据匹配。
  常用的匹配多个字符的语法:
代码功能X*匹配X出现0次或无穷次,即可有可无。X+匹配X出现1次或无穷次,即至少有1次。X?匹配X出现1次或0次,即有一次或一次也没有。X{m}匹配X恰好出现m次。X{m,n}匹配X至少m次,但是不凌驾n次。 例如,一起来完成:
(1)利用X*来匹配出一个字符串:第1个字母为巨细写字母,背面都是小写字母且这些字母可有可无;
(2)通过X+来匹配一个具有数字、巨细写字母、下划线的字符串;
(3)通过X?来匹配0到99之间的任意数字;
(4)通过X{n,m}匹配出5到16位的密码,可以是巨细写英文字母、数字、下划线。
  1. import re
  2. # result = re.match("","").group()
  3. # print(f"结果:{result}")
  4. # X*
  5. # result = re.match("[a-zA-Z]","x").group()
  6. # result = re.match("[a-zA-Z]","U").group()
  7. # result = re.match("[a-zA-Z][a-z]*","U").group()
  8. # result = re.match("[a-zA-Z][a-z]*","UzogY").group()
  9. # print(f"结果:{result}")
  10. # X+
  11. # result = re.match("\w","123abcABC_hello").group()
  12. # result = re.match("\w+","123abcABC_hello").group()
  13. # print(f"结果:{result}")
  14. # X?    0-9    10-99
  15. # result = re.match("[1-9][0-9]","12").group()
  16. # result = re.match("[1-9][0-9]","98").group()
  17. # result = re.match("[1-9]?[0-9]","0").group()
  18. # result = re.match("[1-9]?[0-9]","17").group()
  19. # # result = re.match("[1-9]?[0-9]","09").group()
  20. # print(f"结果:{result}")
  21. # X{m,n}
  22. # result = re.match("[a-zA-Z0-9_]{5,16}","123456").group()
  23. result = re.match("[a-zA-Z0-9_]{5,16}","1234fjwoefwoe23__fwjelf").group()   # ?如何解决?  $
  24. print(f"结果:{result}")
复制代码
  ==总结:==
  (1)利用匹配多个字符的方式,可以一个字符或批量数据内容;
  (2)注意:当要匹配批量数据内容时,应该优先利用:()。A、*;==B、+==。
  [相识]匹配开头和结尾

   ==目标:==相识文本数据开头和结尾的匹配。
  匹配开头和结尾语法:
代码功能^匹配字符串开头。$匹配字符串结尾。 例如,一起来完成:
(1)利用^来匹配非数字的单个字符;
(2)利用$来匹配www.baidu.com的结尾处。
  1. import re
  2. # result = re.match("","").group()
  3. # print(f"结果:{result}")
  4. # 匹配开头: 非数字
  5. result = re.match("[0-9]","1aaa1").group()    # 默认是从第一个字符开始匹配,如果第一个字符不是数字就结束
  6. print(f"结果:{result}")
  7. result = re.match("[^0-9]","g").group()    # 默认是从第一个字符开始匹配
  8. print(f"结果:{result}")
  9. result = re.match("[^0-9]","heima").group()  # 默认是从第一个字符开始匹配
  10. print(f"结果:{result}")
  11. result = re.match("[^0-9]+","heima").group()  # 默认是从第一个字符开始匹配
  12. print(f"结果:{result}")
  13. print('----------------------')
  14. # 匹配结尾
  15. result = re.match(".+","www.baidu.com").group()
  16. print(f"结果:{result}")
  17. result = re.match("www.baidu.com","www.baidu.com").group()
  18. print(f"结果:{result}")
  19. result = re.match("www.baidu.com$","www.baidu.com.cn.gov.edu").group()  # 是否以某个串结尾
  20. print(f"结果:{result}")
  21. result = re.match("^www.baidu.com$","www.baidu.com").group()
  22. print(f"结果:{result}")
复制代码
  ==总结:==
  (1)当要限定结尾处内容时,可以利用()符号。A、b;==B、$==。
  [把握]匹配分组

   ==目标:==把握分组数据的匹配利用。
  要获取分组数据信息,语法:
代码功能X|Y匹配X或Y的任意一个表达式。(X)将括号中字符X作为一个分组用于获取,且从1开始统计分组。 例如,一起来完成:
(1)利用X|Y来匹配出0-100之间的所有数字字符效果;
(2)利用(X)来匹配出含有163、126、qq这几个内容且用户名位数为4-12位的邮箱,如itcast@163.com等。
  1. import re
  2. result = re.match("","").group()
  3. print(f"结果:{result}")
  4. 0-100
  5. result = re.match("hello|world","world").group()  # 只要hello和world有一个匹配上即可
  6. print(f"结果:{result}")
  7. result = re.match("[1-9]?[0-9]|100","8").group()
  8. print(f"结果:{result}")
  9. result = re.match("[1-9]?[0-9]|100","87").group()
  10. print(f"结果:{result}")
  11. result = re.match("[1-9]?[0-9]|100","99").group()
  12. print(f"结果:{result}")
  13. result = re.match("[1-9]?[0-9]|100","100").group()  # 10
  14. print(f"结果:{result}")
  15. result = re.match("100|[1-9]?[0-9]","100").group()
  16. print(f"结果:{result}")
  17. result = re.match("100|[1-9]?[0-9]","10").group()
  18. print(f"结果:{result}")
  19. print('----------------------------------------')
  20. # 邮箱号
  21. result = re.match("(\w{4,12})@(126|163|qq).(com|cn)","hellopy@qq.com").group()
  22. print(result)
  23. print(f"结果:{result[:result.find('@')]}")
  24.       #  re.match('xxxx(表达式1)xxxx(表达式2)',字符串).group(1)
  25.       # group(2) 里边的数字表示获取第2个括号中的内容
  26. result = re.match("(\w{4,12})@(126|163|qq).com","hellopy@163.com").group(2)
  27. print(result)
  28. print(f"结果:{result[:result.find('@')]}")
  29. result = re.match("(\w{4,12})@(126|163|qq).com","hellopy@163.com").group(1)
  30. print(f"结果:{result[:result.find('@')]}")
  31. result = re.match("(\w{4,12})@(126|163|qq).com","hellopy@163.com").group(2)
  32. print(f"结果:{result[:result.find('@')]}")
  33. # group 中不加数字,返回匹配的所有内容
  34. result = re.match("(\w{4,12})@(126|163|qq).com","hellopy@qq.com").group()
  35. print(result)
  36. print(f"结果:{result[:result.find('@')]}")
复制代码
  ==总结:==
  (1)如果在涉及到要获取分组数据时,一定记得要利用()来写正则;
  (2)注意:要获取分组数据时,在正则中的()从1开始盘算分组,好比获取第1组,则group()的括号中应该填写()。==A、1==;B、2。
  





免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4