正则表达式

1. 正则表达式

# 很多注册页面都是需要填写手机号的,那么手机号必须是11位的纯数字,并且必须是常规的手机号开头(13, 15, 17, 18, 19)
'''正则表达式实现手机校验功能'''
import re

phone_number = input('输入手机号码: ').strip()
if re.match('^(13|14|15|18)[0-9]{9}$', phone_number):
    print('是合法的手机号码')
else:
    print('不是合法的手机号码')

"""
正则表达式是一门独立的语言 专门用来匹配、校验、筛查所需的数据
任何编程语言都可以使用 在python中如果想用就必须借助于内置模块re
"""
# 正则表达式其实就是利用一些'特殊符号'的组合,从字符串中筛选出想要的数据

 

2. 正则表达式之字符组

[0123456789]        匹配0到9之间的任意一个数字
[0-9]               匹配0到9之间的任意一个数字,就是上面匹配表达式的缩写
[a-z]               匹配a到z之间的任意一个小写字母
[A-Z]               匹配A到Z之间的任意一个大写字母
[0-9a-zA-Z]        匹配任意一个数字或者大小写字母,里面的0-9,a-z,A-Z顺序都是可以随机分配的,想怎么写就怎么写

 

3. 正则表达式之特殊符号

# 特殊符号默认也是一次匹配一个字符
.                             匹配除换行符以外的任意字符
\w                            匹配数字、字母、下划线(后续筛选变量名可能用到)
\d                            匹配任意的数字
\t                            匹配一个制表符就是匹配一个tab键
^                             匹配字符串的开始的字符  例: ^9  找9并且这个9必须在开头
$                             匹配字符串的结尾       例: 9$  找9并且这个9必须在结尾
\W                            匹配非字母或数字或下划线
\D                            匹配非数字
a|b                           匹配a或者b 管道符就是or(或)的意思
()                            给正则表达式分组 不影响正则匹配(后续再讲)
[]                            字符组的概念(里面所有的数据都是或的关系)
[^]                           上箭号出现在了中括号的里面意思是取反操作

 

4. 正则表达式之量词

"""量词必须跟在表达式的后面 不能单独使用 目的是增加匹配的字符数"""
# 注意量词默认都是贪婪匹配(尽可能多的匹配):后面详细的讲解
re*                                重复零次或者多次(默认就是多次:越多越好)
re+                                重复一次或者多次(默认就是多次:越多越好)
re?                                重复零次或者一次(默认就是一次:越多越好)
re{n}                              重复n次
re{n,}                           重复最少n次最多多次(越多越好)
re{n,m}                     重复n到m次(越多越好)

 

5. 取消转义

\n                \n     False
\\n                \n     True
\\\\n            \\n     True    
在python中还可以在字符串的前面加r取消转义 更加方便
如果想要使用\n,并且不是换行符,那么可以r'\n',这样其中的\n就不是换行符的意思了

 

6. 贪婪匹配与非贪婪匹配

# 正则            # 待匹配的文本                 # 结果
<.*>        <script>alert(123)<script>         1条        贪婪匹配
        以最后一个大括号的出现作为结束标志
<.*?>       <script>alert(123)<script>         2条        非贪婪匹配
        以第一个大括号的出现作为结束标志
  
量词默认都是贪婪匹配 如果想修改为非贪婪匹配 只需要在量词的后面加?即可

贪婪非贪婪通常都是利用左右两边的条件作为筛选依据

 

7. re模块

# 在python中无法直接使用正则 需要借助于模块
# 1.内置的re模块
# 2.第三方的其他模块

import re

# 1. findall(正则表达式,待匹配的文本)
# 结果是所有符合条件的数据 并且组织成了列表
res = re.findall('a', 'jason oscar aaa')
print(res)
# >>>['a', 'a', 'a', 'a', 'a']

# 2. search(正则表达式,待匹配的文本)
# 查找到一个符合条件的数据就结束  没有则返回None
res1 = re.search('a', 'jason oscar aaa')
print(res1)
# >>><re.Match object; span=(1, 2), match='a'>
# 没有则无法调用group() 直接报错
print(res1.group())
# >>>a

# 3. match(正则表达式,待匹配的文本)
# 从字符串的开头匹配 如果没有则直接返回None 类似于给正则自动加了^ 如果符合也只获取一个就结束
res2 = re.match('j', 'jason oscar aaa')
print(res2)
# >>><re.Match object; span=(0, 1), match='j'>
print(res2.group())
# >>>j

# 4. finditer(正则表达式,待匹配的文本)
# 在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
res3 = re.finditer('a', 'jason oscar aaa')
print(res3)
# >>><callable_iterator object at 0x000002251F58A0A0>
print([obj.group() for obj in res3])
# >>>['a', 'a', 'a', 'a', 'a']

# 5. compile(正则表达式)
# 生成一个正则表达式( Pattern )对象。
obj = re.compile('\d+')
print(re.findall(obj, '123232421412a'))  # 写一遍之后 直接反复调用即可
print(re.findall(obj, 'python 123 cat'))
print(re.findall(obj, 'cat 123124 python'))

 

posted @ 2022-03-28 16:43  thrombus  阅读(42)  评论(0)    收藏  举报