正则表达式与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
复制代码

网络爬虫

通过编写代码模拟浏览器发送请求获取数据并按照自己指定的要求筛选出想要的数据

posted @   橘子菌菌n  阅读(72)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示