左侧 导航 网站,在线制作图片小视频,可在哪些网站做链接,吉林网站建设司本文将介绍几个最常用的正则符号#xff0c;以及正则表达式的应用场景。如果说【数学表达式】刻画的是数字的内在规律#xff0c;那么【正则表达式】则是用来刻画和描述字符串内在规律的表达式。记得刚接触python时学习过slice#xff0c;replace#xff0c;split等方法以及正则表达式的应用场景。如果说【数学表达式】刻画的是数字的内在规律那么【正则表达式】则是用来刻画和描述字符串内在规律的表达式。记得刚接触python时学习过slicereplacesplit等方法但是一旦遇到复杂的情况这些工具就不能使用了。这个时候【正则表达式】就派上了用场。使用正则表达式需要导入【re模块包】import re主要有三种使用场景场景1无法通过切片将字符串的子串返回 findall函数#语法findall(pattern,string,flags0)pattern:指定需要匹配的正则表达式string:指定待处理的字符串flags:指定匹配模式常用的值可以是re.I,re.M,re.S,re.Xre.I模式是让正则表达式对大小写不敏感re.M模式是让正则表达式可以多行匹配re.S模式是指正则符号可以匹配任意字符包括换行符\nre.X模式允许正则表达式可以写得更加详细如多行表示忽略空白字符加入注释等场景2借助replace无法完成非固定值或非固定位置值的替换 sub函数#语法sub(pattern,repl,string,count0,flags0)pattern:指定需要匹配的正则表达式repl:指定替换成的新值string:指定待处理的字符串count:用于指定最多替换的次数默认0为全部替换flags:同findall函数中的flags场景3借助于split方法无法按照多种值实现字符串的分割 re.split函数#语法split(pattern,string,maxsplit0,flags0)pattern:指定需要匹配的正则表达式string:指定待处理的字符串maxsplit:用于指定最大分割次数默认0为全部分割flags:同findall中的flags常用的正则符号(注意组合使用)原字符2. 英文状态的句号点 .3. 反斜杠 \4. 英文状态的中括号[]5. 英文状态的圆括号()6. 英文状态的问号7. 加号8. 星号 *9. 英文状态的大括号{}下面一一举例介绍原字符指代直接存在于字符串内部的子串#导入第三方模块包import re#提取字符串中的子串s1python是一门计算机程序语言python语言具有简洁性、易读性等特点re.findall(python,s1)2. 英文状态的句点号 .指代任意字符(如数字、字母、标点符号、汉字等)但除了换行符\n#提取出动力总成的值s2此次新朗逸主要搭载了1.5L和1.5T两种动力总成的发动机。别克英朗则搭载了1.0T和1.3T的动力总成。#写法1re.findall(1...,s2)#写法2用到转义字符\re.findall(1\...,s2)3. 反斜杠 \\n 换行\t Tab制表符\d 0-9中的任一数字\s 任意一种空白(如空格、Tab、换行等)\w 字母、数字、下划线中的任意一种(63种52种字母大小写数字0-9共10种_1种)\. 句号点本身\\ \本身#剔除字符串中的所有空白s3 距离2019北京马拉松开跑只有两周时间了\n今年的北京马拉松预报名人数超过16万人\t媒体公布的中签率只有16%左右再创历年来的新低。\nprint(s3)re.sub(\s,,s3)4. 英文状态的中括号[]指代字符集合当需要特定字符匹配时可以选择中括号#取出手机号信息s4用户联系方式13612345566用户编号11011254321re.findall(1[356789]\d\d\d\d\d\d\d\d\d,s4)#提取出动力总成s5通过对比新朗逸1.5L和1.5T两种动力在1.5年行使期后的数据。发现1.5T的口碑相对较好re.findall(1.5[a-zA-Z],s5)re.findall(1.5[LT],s5)5. 英文状态的圆括号()指代特定内容的截取#提取出用户的年龄s6id:1,name:Tom,age:3,gender:1;id2,nameLily,age5,gender0print(re.findall(\d,s6))print(re.findall(age:\d,s6))print((re.findall(age:(\d),s6)))6.英文状态的问号 表示匹配前一个字符0次或1次#超链接的匹配URL1https://www.baidu.com/URL2http://www.gov.cn/patternhttps?://www\..*?\..*?/7. 加号表示匹配前一个字符一次及以上#邮箱地址的匹配email1Lsxxx2011163.comemail2654088115qq.compattern[0-9a-zA-Z_\.\-][0-9a-zA-Z_\-]\.com8. 星号*表示匹配前一个字符0次及以上#提取出产品名称中含有奶粉字样的产品prod[婴儿袜,亨氏奶粉,奶粉勺,多功能奶瓶,幼儿奶粉量筒,磨牙棒]res[]for i in prod:res.extend(re.findall(.*奶粉.*,i))res# extend()函数用于在列表末尾一次性追加另一个序列中的多个值9. 英文状态的大括号{}表示匹配前一个字符特定的次数或范围{m} 匹配前一个字符m次{m,} 匹配前一个字符至少m次{m,n} 匹配前一个字符m~n次{,n} 匹配前一个字符之多n次#手机号码的匹配pattern1[356789]\d{9}#至少6个长度的密码pattern\w{6,}#区号信息pattern0\d{2,3}正则表达式的案例应用取出字符中所有的天气状态import restring {ymd:2018-01-01,tianqi:晴,aqilnfo轻度污染}{ymd:2018-01-02,tianqi:阴~小雨,aqilnfo优},{ymd:2018-01-03,tianqi:小雨~中雨,aqilnfo优},{ymd:2018-01-04,tianqi:中雨~小雨,aqilnfo优}print(re.findall(tianqi:(.*?),string))#.*?组合 防止盲目匹配非贪婪式搜索2. 取出所有含O/o字母的单词import restring2Together,we discovered that a free market only thrives when there are rules toensure competition and fair play,Our celebration of initiative and enterprise.print(re.findall(\w*o\w*,string2,flagsre.I))3. 将标点符号、数字和字母删除import restring3据悉这次发运的4台蒸汽冷凝罐属于国际热核聚变实验堆 (ITER)项目的核二级压力设备先后完成了压力试验真空试验、氦气检漏实验千斤顶试验吊耳荷载试验叠装试验等验收试验print(re.sub([。、a-zA-Z0-9()],,string))4.将每一部分的内容分割开import restring42室2厅|101.62平|低区/7层|朝南\n 上海未来-浦东-金杨-2005年建splitre.split([-\|\n],string4) #|代表或所以要用转义字符\print(split)split_strip[i.strip() for i in split]print(split_strip)