《Python正则表达式使用.docx》由会员分享,可在线阅读,更多相关《Python正则表达式使用.docx(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Python正则表达式使用小练习用代码实现自定义的replace_practice交换函数实当代码如下功能是将字符串中所包含的空格交换为mmdefreplace_practice(str,a,b,countNone):i0#记录交换count次数n0resultifcountNone:countlen(str)whileilen(str)andlen(str)!0andncount:ifstri:ilen(a)a:resultlist(str0:i)list(b)strstrilen(a):n1i0else:i1result.append(str)return.join(result)if_n
2、ame_main_:string*112567*abc*98765*xyz*print(string)aprint(交换结果,replace_practice(string,mm)可以看到函数replcae_parctice主要是将每个空格交换为两个m字符串。当然实际的开发中还会存在不同的交换功能需要自行实现或其它但Python内置的字符串函数可以解决很大一局部功能节省了开发人员的工作时间提升了开发效率非常高效。今天的重点在于正那么在Python中的使用正那么表达式是一种特殊的字符序列用于处理更为复杂的字符串方便开发人员检查一个字符串是否与某种形式匹配。简单来讲正那么表达式就是一种简练描绘一组
3、字符串的方式可用于高效地执行常见的字符串处理任务如匹配、分拆以及交换比Python字符串函数功能更为强大。1正那么表达式根据维基百科正那么表达式是对字符串操作的一种逻辑公式其功能主要是对定义好的一些特定字符、及这些特定字符的组合组成一个“规那么字符串这个“规那么字符串用来表达对字符串的一种过滤逻辑。特点包含以下几点1.灵敏性、逻辑性以及功能性非常强2.迅速地用极简单的方式到达字符串的复杂控制3.对于初学者有些不太友好比拟难懂。既然正那么表达式对于使用者不太友好那任何一种语言都竭力推荐它的原因是什么该表达式可以帮助开发者们从字符串中匹配到要的特定局部主要用于它可以1.测试字符串内的形式例如可以测
4、试输入字符串以查看字符串内是否出现号码形式或者信誉卡号码形式。这称为数据验证数据处理等2.基于形式匹配从字符串中提取子字符串可以查找文档内或者输入域内特定的文本3.交换文本可以使用正那么表达式来识别文档中的特定文本完全删除该文本或用其他文本交换它。举一个简单的正那么表达式例如几个字符串a.txt,aa.sh,aaa.py,a2a.txt,简单的使用shell命令(python根本类似)查看如下列图正那么表达式a*表达了所有含a的字符串a2*仅表示a2a.txt也请注意正那么匹配的用法。Python在正那么表达式中可使用圆括号来指出要将运算符用于那个子串。例如正那么表达式(ha)!描绘了如下字符
5、串ha!、haha!、hahaha!等而ha!描绘了一组截然不同的字符串ha!、haa!、haaa!等。1.1正那么匹配字符串匹配字符串是正那么表达式的一种常见使用。例如假设你要编写一个程序要求必须输入finished或者failed来完毕程序。defjudge(string):returnstringfinishedorstringfailed当然Python提供了一个功能特别强大的正那么函数模块re。上述judge()函数等同于下面的代码第1行导入Python的标准正那么表达式库。为匹配正那么表达式使用了函数re.match(regex,string)它在regex与string不匹配时返
6、回None否那么返回一个特殊的正那么表达式匹配对象。在这个例如中不需要关心匹配对象的细节只检查返回值是否为None。importredefjudge_re(string):#returnstringfinishedorstringquitreturnre.match(finfished|failed,string)!None比照这两个功能一样的函数我们发现judge_re()函数并不比judge()函数代码少但在使用中会发现随着程序逻辑的复杂性代码量越来越大re模块的优秀会让人越勇越爽。可以在judge()函数中多加几个判断完成的字符串在体验一下对于judge_re只需要将re.match括号
7、引号内改为done|quit|over|finished|end|stop而judge那么需要多加or来完成使得代码的浏览感直线下降。更复杂一下程序函数需要实现取出开始为一个或者多个tian末尾为ha的字符串使用Python自带的正那么表达式那么特别简单许多更详细的案例可以参考官网:/docs.python.org/3/library/re.htmlimportredefget_string(s):returnre.match(tina)(ha),s)!None1.2Python正那么语法构造正那么表达式的方法以及创立数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来
8、创立更大的表达式。正那么表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或所有这些组件的任意组合。1.2.1普通字符普通字符包括没有显式指定为元字符的所有可打印以及不可打印字符包括所有大写以及小写字母、数字、标点符号以及局部其它符号字符描绘 ABC匹配.中的所有字符例如lbk匹配字符串lihaobatokechen中所有的lbk字母 ABC匹配除了.中的所有字符例如lbk匹配字符串lihaobatokechen中除了lbk的字母 A-Z A-Z表示一个区间匹配所有大写字母a-z表示所有小写字母 sS匹配所有。s是匹配所有空白符包括换行S非空白符不包括换行w匹配字母、数字、下划线。
9、等价于A-Za-z0-9_.匹配除换行符n、r之外的任何单个字符相等于nr1.2.2非打印字符字符描绘cx匹配由x指明的控制字符f匹配一个换页符n匹配一个换行符r匹配一个回车符s匹配任何空白字符包括空格、制表符、换页符等等等价于fnrtvS匹配任何非空白字符等价于fnrtvt匹配一个制表符等价于x09以及cI。v匹配一个垂直制表符等价于x0b以及cK。1.2.3特殊字符十分字符描绘$匹配输入字符串的结尾位置 ()标记一个子表达式的开场以及完毕位置*匹配前面的子表达式零次或者屡次匹配前面的子表达式一次或者屡次要匹配字符请使用.匹配除换行符n之外的任何单字符 标记一个中括号表达式的开场?匹配前面的
10、子表达式零次或者一次或者指明一个非贪心限定符将下一个字符标记为或者特殊字符、或者原义字符、或者向后引用、或者八进制转义符匹配输入字符串的开场位置除非在方括号表达式中使用当该符号在方括号表达式中使用时表示不承受该方括号表达式中的字符集标记限定符表达式的开场|指明两项之间的一个选择大数据系列文章后期首发公众号“涤生手记大数据欢送大众关注沟通哈有优秀的原创文章也投递给我有偿知识共享。1.2.4限定字符限定符用来指定正那么表达式的一个给定组件必需要出现多少次才能知足匹配。有*或者或者?或者n或者n,或者n,m共6种。字符描绘*匹配前面的子表达式零次或者屡次匹配前面的子表达式一次或者屡次?匹配前面的子表
11、达式零次或者一次nn是一个非负整数。匹配确定的n次n,n是一个非负整数。至少匹配n次n,mm以及n均为非负整数其中nm如下匹配一个正整数1-9设置第一个数字不是00-9*表示任意多个数字/1-90-9*/1.3Python正那么运算符优先级正那么表达式从左到右进展计算并遵循优先级顺序这与算术表达式非常类似。一样优先级的从左到右进展运算不同优先级的运算先高后低。下表从最高到最低讲明了各种正那么表达式运算符的优先级顺序运算符描绘转义符 (),(?:),(?),圆括号以及方括号*,?,n,n,n,m限定符,$,任何元字符、任何字符定位点以及序列即位置以及顺序|交换或者操作字符具有高于交换运算符的优先
12、级2Re正那么模块正那么表达式一般涉及了许多复杂的过滤规那么与匹配条件我们在此不做太多的赘述。主要目的想夸一夸Python中re模块的强大功能自从1.5版本增加了re模块后Python语言自此拥有了全部的正那么表达式功能。2.1re.match函数该函数主要从字符串的起始位置匹配一个形式假如不是起始位置匹配成功的话match()就返回noneimportrestringBananaaresamllerthandurian#.*表示任意匹配除换行符n、r之外的任何单个或者多个字符#(.*?)表示非贪心形式只保存第一个匹配到的子串match_testre.match(r(.*)are(.*?).*
13、,string,re.M|re.I)print(match_test.group()注意以下我们修改了string字符串内容同样的匹配规那么在这里就报了错误异常这是因为match函数只能从头开场匹配不能从中间开场。而当返回值为none时再次调用group方法就会出现AttributeError:NoneTypeobjecthasnoattributegroup其中re.I是匹配对大小写不敏感re.M多行匹配(用到的时候最好用去模块中查询)。importrestringMyfavouritecolorisbluematch_testre.match(r(.*)are(.*?).*,string,
14、re.M|re.I)print(match_test.group()可能有些同学不太理解match函数中的group等参数的含义这就需要我们去浏览模块内的参数作用及用法本次给出match函数相关参数、匹配对象方法及作用如下表参数讲明参数描绘pattern匹配的正那么表达式string要匹配的字符串flags标志位用于控制正那么表达式的匹配方式如是否区分大小写多行匹配等等匹配对象方法讲明匹配对象方法描绘group(num0)匹配的整个表达式的字符串group()可以一次输入多个组号在这种情况下它将返回一个包含那些组所对应值的元组。groups()返回一个包含所有小组字符串的元组从1到所含的小组号
15、2.2re.search函数re.search扫描整个字符串并返回第一个成功的匹配。importrestringBananaaresamllerthandurianmatch_testre.search(r(.*)are(.*?).*,string,re.M|re.I)print(match_test.group()将上一个例如match函数修改为search可以看到执行结果是一样的。这二者的区别只是在于re.match只匹配字符串的开场假如字符串开场不符合正那么表达式那么匹配失败函数返回None而re.search匹配整个字符串直到找到一个匹配。Re模块也提供了其它功能如re.sub()函数提供了交换字符串的功能repile()函数那么用于编译正那么表达式生成一个正那么表达式Pattern对象供match()以及search()这两个函数使用。各位感兴趣的可以自行深化re模块官网学习最后再留一个关于正那么表达式的小练习匹配出以下字符串所有url。不要用循环去判断哦最好使用PythonRe模块实现需要自定义complie方法实现过滤规那么哦。str1你好哇大佬googlestr2哇baidu打不开了str3python网址在哪儿s:/python找到了涤生手记大数据
限制150内