11位⼿机号正则表达式_Python学习100天-Day19(正则表达
式)
Day19-正则表达式
正则表达式相关知识
在编写处理字符串的程序或⽹页时,经常会有查符合某些复杂规则的字符串的需要,正则表达式就是⽤于描述这些规则的⼯具,换句话说正则表达式是⼀种⼯具,它定义了字符串的匹配模式(如何检查⼀个字符串是否有跟某种模式匹配的部分或者从⼀个字符串中将与模式匹配的部分提取出来或者替换掉)。如果你在Windows操作系统中使⽤过⽂件查并且在指定⽂件名时使⽤过通配符(*和?),那么正则表达式也是与之类似的⽤来进⾏⽂本匹配的⼯具,只不过⽐起通配符正则表达式更强⼤,它能更精确地描述你的需求(当然你付出的代价是书写⼀个正则表达式⽐打出⼀个通配符要复杂得多,要知道任何给你带来好处的东西都是有代价的,就如同学习⼀门编程语⾔⼀样),⽐如你可以编写⼀个正则表达式,⽤来查所有以0开头,后⾯跟着2-3个数字,然后是⼀个连字号“-”,最后是7或8位数字的字符串(像028-********或0813-*******),这不就是国内的座机号码吗。最初计算机是为了做数学运算⽽诞⽣的,处理的信息基本上都是数值,⽽今天我们在⽇常⼯作中处理的信息基本上都是⽂本数据,我们希望计算机能够识别和处理符合某些模式的⽂本,正则表达式就显得⾮常重要了。今天⼏乎所有的编程语⾔都提供了对正则表达式操作的⽀持,Python通过标准库中的re模块来⽀持正则表达式操作。
我们可以考虑下⾯⼀个问题:我们从某个地⽅(可能是⼀个⽂本⽂件,也可能是⽹络上的⼀则新闻)获得了⼀个字符串,希望在字符串中出⼿机号和座机号。当然我们可以设定⼿机号是11位的数字(注意并不是随机的11位数字,因为你没有见过“25012345678”这样的⼿机号吧)⽽座机号跟上⼀段中描述的模式相同,如果不使⽤正则表达式要完成这个任务就会很⿇烦。
Python对正则表达式的⽀持
Python提供了re模块来⽀持正则表达式相关操作,下⾯是re模块中的核⼼函数。
说明: 上⾯提到的re模块中的这些函数,实际开发中也可以⽤正则表达式对象的⽅法替代对这些函数的使⽤,如果⼀个正则表达式需要重复的使⽤,那么先通过compile函数编译正则表达式并创建出正则表达式对象⽆疑是更为明智的选择。
下⾯我们通过⼀系列的例⼦来告诉⼤家在Python中如何使⽤正则表达式。
例⼦1:验证输⼊⽤户名和QQ号是否有效并给出对应的提⽰信息。
例⼦2:替换字符串中的不良内容
说明: re模块的正则表达式相关函数中都有⼀个flags参数,它代表了正则表达式的匹配标记,可以通过该标记来指定匹配时是否忽略⼤⼩写、是否进⾏多⾏匹配、是否显⽰调试信息等。如果需要为flags参数指定多个值,可以使⽤按位或运算符进⾏叠加,如
flags=re.I | re.M。
例⼦3:拆分长字符串
python正则表达式爬虫
总结
如果要从事爬⾍类应⽤的开发,那么正则表达式⼀定是⼀个⾮常好的助⼿,因为它可以帮助我们迅速的从⽹页代码中发现某种我们指定的模式并提取出我们需要的信息,当然对于初学者来收,要编写⼀个正确的适当的正则表达式可能并不是⼀件容易的事情(当然有些常⽤的正则表达式可以直接在⽹上),所以实际开发爬⾍应⽤的时候,有很多⼈会选择Beautiful Soup或Lxml来进⾏匹配和信息的提取,前者简单⽅便但是性能较差,后者既好⽤性能也好,但是安装稍嫌⿇烦。爬⾍⽅⾯的我也在学习,有机会可以跟⼤家分享⼀下学习爬⾍的情况。