今天来发一下python正则表达式,其实这个也是比较简单的 肝了好几个小时才写出来呀 什么是正则表达式() 目前越来越多的网站、编辑器、编程语言都已支持一种叫正则表达式的字符串查找公式,有过编程经验的同学都应该了解正则表达式(RegularExpression简写regex)是什么东西,它是一种字符串匹配的模式(pattern),更像是一种逻辑公式。 简单说,正则表达式是 python中必备的工具,主要是用来查找和匹配字符串的。 正则表达式尤其在python爬虫上用得多。 正则表达式怎么用 首先,我们要导入头文件(写c写习惯了)模块 importre 因为re是内置模块,所以不需要额外安装,就很银杏 sreach的用法 匹配连续的多个数值 importre rrd mre。search(r,YRYR567eruwgf)目标是567 print(m) re模块中,rd正则表达式表示匹配连续的多个数值,search是re中的函数,从YRYR567eruwgf字符串中搜索连续的数值,得到567 结果: 可以看到,搜索到了连续值567 字符重复前面一个匹配字符一次或者多次 importre rrbd mre。search(r,a12b1233cd) print(m) 这样,结果就是b后面的连续数字 结果: 字符重复前面一个匹配字符零次或者多次 与类似,但有区别,例如: 可见rab匹配的是ab,但是rab匹配的是a,因为表示b可以重复零次,但是却要求b重复一次以上 importre rrab mre。search(r,acabc) print(m) rrab mre。search(r,acabc) print(m) 结果: 字符?重复前面一个匹配字符零次或者一次 匹配结果ab,重复b一次 importre rrab? mre。search(r,abbcabc) print(m) 结果: 特殊字符使用反斜杠引导,例如r、、、分别表示回车、换行、制表符号与反斜线自己本身 importre rrab mre。search(r,cabcaba) print(m) 结果: 完整表 其实上面说的这些都是比较基础,比较简单的,还有复杂一点的,都在这张表里 match用法 match用法 语法:re。match(pattern,string〔,flags〕) 从首字母开始开始匹配,string如果包含pattern子串,则匹配成功,返回Match对象,失败则返回None,若要完全匹配,pattern要以结尾。 示例: name张三 ifre。match(张w,name): print({},你好!。format(name)) 张三,你好! 输出结果:张三,你好 张三:谁叫我? 不开玩笑了,继续说 总的来说,match就是 返回匹配的match对象 默认从给定字符串的开头开始匹配、即使正则表达式没有用声明匹配开头 match对象 Match对象的几个属性: 注意,前面是有。的 1。。string待匹配的文本 2。。re匹配使用的pattern对象 3。。pos正则表达式搜索文本的开始位置 4。。endpos正则表达式搜索文本的结束位置 Match对象的几个方法: 1。group(0)返回匹配到的子串 2。start()返回匹配子串的开始位置 3。end()返回匹配子串的结束位置 4。span()返回start()、end() 数量词 匹配开头、结尾 匹配分组 好了,看了上面几张表,其实我觉得最重要的还在下面 match总结 其实没啥好总结的,但你要看懂这张图,这个很重要 我框出来的是我自己感觉经常用的 其实我自己刚学的时候也听不懂,现在觉得可简单了 所以,你应该现在就觉得很简单吧? 但是,正则表达式的字符很多,容易记混,一不小心就好几十个报错,很让人崩溃 实践出真知凸(0)凸 学了这么多,是不是想撸个程序了? 已经给你准备好了 程序效果:输入手机号,通过正则表达式判断手机号合不合法, 如果合法,就输出这个手机号的信息(所属地等) 如果不合法,就重新输入,简单吧? 这里我想重点说一下怎么获取手机号的信息 我一开始打算上网上百度一波的,没想到直接复制过来23个报错、我也是醉了 哎呀,不能再发表情包了 ()))唉,还是自己写吧、、、 我想起了有个模块叫phone,可以实现这个功能 但是你可能还没有安装这个模块,要按命令行模式下输入pipinstallphone 等个六六四十九秒就下载下来了 然后你就可以体验一下了 代码(PyCharm运行通过) importphone fromtimeimport importre defbegin(): print(欢迎来到查询小程序) print(1。查询) print(2。用户) defp(n): ifre。match(r1〔3,4,5,7,8〕d{9},n): ifre。match(r13〔0,1,2〕d{8},n)or re。match(r15〔5,6〕d{8},n)or re。match(r18〔5,6〕,n)or re。match(r145d{8},n)or re。match(r176d{8},n): returnTrue elifre。match(r13〔4,5,6,7,8,9〕d{8},n)or re。match(r147d{8}178d{8},n)or re。match(r15〔0,1,2,7,8,9〕d{8},n)or re。match(r18〔2,3,4,7,8〕d{8},n): returnTrue else: returnTrue else: returnFalse ifnamemain: s0 begin() whileTrue: opint(input(请输入:)) ifop1: phoneNumstr(input(请输入你的电话号码)) ifp(phoneNum)False: print(该手机号无效) foriinrange(100): print() begin() else: infophone。Phone()。find(phoneNum) print(手机号码:str(info〔phone〕)) print(手机所属地:str(info〔province〕)省str(info〔city〕)市) print(邮政编号:str(info〔zipcode〕)) print(区域号码:str(info〔areacode〕)) print(手机类型:str(info〔phonetype〕)) s1 iinput(输入任意数退出。。。) foriinrange(100): print() begin() ifop2: print(使用次数:str(s)) iinput(输入任意数退出。。。) foriinrange(100): print() begin()