正则表达式与re正则模块
正则表达式匹配手机号码
phone_number = input('please input your phone number: ') if re.match('^(13|14|15|17|18|19)[0-9]{9}$', phone_number): print('是合法的手机号码') else: print('不是合法的手机号码')
正则表达式匹配身份证号码
1. ^[1-9]\d{13,16}[0-9x]$ 2. ^[1-9]\d{14}(\d{2}[0-9x])?$ 3. ^([1-9]\d{16}[0-9x]|[1-9]\d{14})$
一般的我们所需要的正则在网上已经存在,我们只需要查找即可
正则匹配的定义
利用一些特殊符号的组合产生一些特殊的含义去字符串中筛选符和条件的数据。
正则匹配字符组
"""字符组默认匹配方式是挨个匹配"""
[0123456789] # 匹配0到9任意一个数(全写) [0-9] # 匹配0到9任意一个数(缩写) [a-z] # 匹配a到z任意一个字母 [A-Z] # 匹配到A-Z任意一个字母 [0-9a-zA-Z] # 匹配任意一个大小写字母或数字 字符组内所有的数据默认都是或的关系
正则匹配特殊符号
"""特殊符号默认匹配方式是挨个匹配"""
. # 匹配除换行符以外的任意字符 \w # 匹配数字字母下划线 \W # 与\w取反 \d # 匹配数字 ^ # 匹配字符串的开头 $ # 匹配字符串的结尾 | # 管道符,意思是或 () # 给正则表达式分组,不影响表达式的匹配功能 [] # 字符组 内部关系默认或 [^] # 字符组 取反操作 上尖号在中括号内和中括号意思完全不同
正则匹配量词
"""正则表达式默认情况下都是贪婪匹配""" * # 匹配0次或多次 + # 匹配1次或多次 ? # 匹配0次或1次 作为量词意义不大主要用于非贪婪匹配 {n} # 重复n次 {n,} # 重复n次或多次 {n,m} # 重复n次到m次 量词必须结合表达式一起使用不能单独出现 并且只影响第一个表达式
贪婪 / 非贪婪匹配 / 转义符
"""所有的量词都是贪婪匹配,如果想要变为非贪婪匹配需要在量词后面加括号""" # 贪婪匹配 <.*> # 非贪婪匹配 <.*?> * 转义符 """斜杠与字母组合有时候会产生特殊的含义""" \n # 匹配的是换行符 \\n # 匹配的是文本\n \\\\n # 匹配的是文本\\n 如果是在python中使用 还可以在字符串前面加r取消转义
re正则模块
import re # 常见操作方法 # 1. 查找所有符合正则表达式要求的数据,结果直接是一个列表 res = re.findall('a', 'jason apple eva') print(res) # 2. 查找所有符合正则表达式要求的数据,结果是一个迭代器对象 res = re.finditer('a', 'jason apple eva') print(res) # 3. <re.Match object; span=(1, 2), match='a'> res = re.search('a', 'jason apple eva') print(res) # 匹配到一个符合条件的数据就立刻结束 print(res.group()) # a # 4.匹配字符串的开头 如果不符合后面不用看了 res = re.match('a', 'jason apple eva') print(res) # None
# 匹配开头符合条件的数据 一个就结束 print(res.group()) # 5.当某一个正则表达式需要频繁使用的时候 我们可以做成模板 obj = re.compile('\d{3}') # res1 = obj.findall('23423422342342344') # res2 = obj.findall('asjdkasjdk32423') # print(res1, res2) # 6.先按'a'分割得到''和'bcd',在对''和'bcd'分别按'b'分割 ret = re.split('[ab]', 'abcd') print(ret) # ['', '', 'cd'] # 7.将数字替换成'H',参数1表示只替换1个 ret = re.sub('\d', 'H', 'eva3jason4yuan4', 1) print(ret) # evaHjason4yuan4 # 8.将数字替换成'H',返回元组(替换的结果,替换了多少次) ret = re.subn('\d', 'H', 'eva3jason4yuan4') print(ret) # ('evaHjasonHyuanH', 3)
1.分组优先 res = re.findall('www.(baidu|oldboy).com','www.oldboy.com') print(res) # ['oldboy'] findall分组优先展示:优先展示括号内正则表达式匹配到的内容 res = re.findall('www.(?:baidu|oldboy).com','www.oldboy.com') print(res) # ['www.oldboy.com'] res = re.search('www.(baidu|oldboy).com', 'www.oldboy.com') print(res.group()) # www.oldboy.com res = re.match('www.(baidu|oldboy).com', 'www.oldboy.com') print(res.group()) # www.oldboy.com 2.分组别名 res = re.search('www.(?P<content>baidu|oldboy)(?P<hei>.com)', 'www.oldboy.com') print(res.group()) # www.oldboy.com print(res.group('content')) # oldboy print(res.group(0)) # www.oldboy.com print(res.group(1)) # oldboy print(res.group(2)) # .com
print(res.group('hei')) # .com
网络爬虫
通过编写代码模拟浏览器发送请求获取数据并按照自己指定的要求筛选出想要的数据
分类:
python基础 / 模块
, python基础
标签:
python基础
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律