Python正则表达式
import re # 1.match从起始位置开始匹配 text = 'python' res = re.match("py",text) print(res.group()) #2 .匹配一个任意字符,无法匹配\n换行符号 text2 = "点python" res2 = re.match('.',text2) print(res2.group()) #3. \d 只匹配数字 text3= '25python' res3 = re.match('\d',text3) # 等价 \d === [0-9] res3 = re.match('[0-9]',text3) print(res3.group()) # 4. \D 除了数字以外都匹配 text4 = 'D25python' res4 = re.match('\D',text4) # 等价 \D === [^0-9] print(res4.group()) # 匹配所有字符 ree = re.match('[\d\D]+',text4) print('27', ree.group()) # 5. \s 匹配空白字符 如\n \t \s 空格 text5 = '\tpython' res5 = re.match('\s',text5) print(res5.group()) # 6. \w 匹配大小写字母、数字、下划线 text6 = '_7python' res6 = re.match('\w', text6) print(res6.group()) # 7. \W 和 \w互补 text6 = '*7python' res6 = re.match('\W', text6) # 等价 \W === [^0-9a-zA-Z] res6 = re.match('[^0-9a-zA-Z]',text6) print(res6.group()) # 8. [] 匹配中括号里面的字符,多内容匹配时,“或”运算思想 ,只要对象中含有一个内容就匹配一次 # /s是空格 text6 = '& 7python' res6 = re.match('[&/s7]', text6) print(res6.group()) # 9. * 号 匹配零个或多个字符,符合规则就一直往后匹配,直到不符合规则。如果第一个就不符合就匹配0次,返回none,且不报错 texts = '18183-9000-9000' ress = re.match('[- \d]*', texts) print(ress.group()) # 10. + 匹配一个或多个, 至少匹配一个,不符合规则会报错 texts = '18183-9000-9000' ress = re.match('[\d]+', texts) print(ress.group()) # 11. ? 匹配零个或一个 texts = '18183-9000-9000' ress = re.match('[- \d]?', texts) print(ress.group()) # 12. {n} 匹配n次 texts = '18183-9000-9000' ress = re.match('[- \d]{6}', texts) print(ress.group()) # 13. {m,n} 匹配m到n次,默认匹配最多次,m是保底,n是极限,匹配不到m次会报错 texts = '181-9|000-9000' ress = re.match('[- \d]{2,6}', texts) print(ress.group()) # 匹配所有字符 ree = re.match('[\d\D]+',text4) print('27', ree.group()) # 匹配任意字符 [.]表示只匹配真实的点.本身 reee = re.match('.+',text) print(reee.group()) # 电话号码 第一位是1,第二位是3-9,一共11位 tel = "13689759284" re_tel = re.match('1[3-9][0-9]{9}',tel) print(re_tel.group()) # 邮箱匹配 mail = 'zwnsyw@qq.com' re_mail = re.match('\w+@[0-9a-z]+[.][comcn]+',mail) print(re_mail.group()) # 14. search 从左往右匹配,返回第一个匹配结果 txt = "pythonpyy" rs = re.search('pyy',txt) print(rs.group()) # 15. ^在中括号里面,表示取反,在外面表示以什么字符开头 txt = "pythonpy" rs = re.search('^pyt',txt) print(rs.group()) # 16. $ 以特定的字符串为结尾 txt = "pythonpyy" rs = re.search('pyy$',txt) print(rs.group()) # 17. | ‘或’ 匹配多个表达式或者字符串 [|]认为里面是单个字符,匹配一次 (|)认为里面是一个长度的字符串 txt = "https://www.bilibili.com/video/" rs = re.search('[http|https|ftp|file|video]',txt) # 单字符匹配一次 print(rs.group()) rs = re.search('[http|https|ftp|file|video]+',txt) # 匹配多次 print(rs.group()) rs = re.search('(http|https|ftp|file|video)+',txt) # 匹配多次 print(rs.group()) # 18. 贪婪模式和非贪婪模式 默认就是贪婪模式>=1 非贪婪模式 <=1 使用?实现 txt = ''' <tr class="host"> <tr class='1'>host1</tr> <tr class='2'>host2</tr> <tr class='3'>host3</tr> <tr class='4'>host4</tr> <tr class='5'>host5</tr> <tr class='6'>爬虫</tr> </tr> ''' # 获取<tr class='host> # 贪婪模式 rr = re.match('\n<tr[\d\D]+>',txt) print(rr.group()) # 非贪婪模式 # 简单理解就是第一次遇到 ? 后面的字符就停下来 rr = re.match('\n<tr[\d\D]+?>',txt) print(rr.group())
人生苦短,慢慢潇洒。
nsyw.run