正则表达式,又称规则表达式,是使用单个字符串来描述、匹配某个语法规则的字符串,常被用来检索、替换那些符合某个模式(规则)的文本

简单来说,正则表达式就是使用:字符串定义规则,并通过规则验证字符串是否匹配

只要配置好正则规则,即可匹配到自己想要的数据

正则表达式的优势

# # if判断手机号
# number = input('请输入你需要识别的内容:')
# if number[0:2] == '13':
#     print('这是一个手机号')
# else:
#     print('不是一个手机号')
​
# 正则匹配手机号
import re
number = input('请输入需要识别的内容;')
# 匹配1开头
r1 = re.findall('^1\d{10}$', number)
print(r1)
# 匹配13开头
r2 = re.findall('^13\d{9}$', number)
print(r2)

re模块的三种使用方法(基础字符串匹配)

python正则表达式,使用re模块,并基于re模块中三个基础方法来做正则匹配

分别是:match、search、findall三个基础方法

  • re.match(匹配规则,被匹配字符串)

从被匹配的而字符串开头进行匹配,匹配成功返回匹配对象(包含匹配的信息),匹配不成功返回None

  • re.search

搜索整个字符串,找出匹配的。从前向后,找到第一个后,就停止,不会继续向后(搜索不到返回None)

  • re.findall

匹配字符串,找出全部匹配项(搜索不到返回空列表list:[])

"""
正则表达式
re模块的3个基础匹配方法
match()
search()
findall()
"""
​
import re
​
s = 'python hello  hello python hello python hello python'
# match 从头匹配:从被匹配字符串开头进行匹配,匹配成功返回匹配对象(包含匹配的信息),匹配不成功返回空(搜索不到返回None)
result = re.match('python', s)  # (匹配规则,被匹配的数据)
print(result)
# print(result.span())  # (0,6)
# print(result.group())  # python
​
# search 搜索匹配:搜索整个字符串,找出匹配的。从前向后,找到第一个后,就停止,不会继续向后(搜索不到返回None)
result = re.search('python', s)
print(result)
​
# findall 搜索全部匹配:匹配字符串,找出全部匹配项(搜索不到返回空列表list:[])
result = re.findall('python', s)
print(result)

元字符匹配

"""
正则的匹配可以在所有编程语言中使用
python正则表达式使用元字符进行匹配
正则匹配的规则不能出现额外的空格
"""
import re
s = 'python2 3@!#% !! 666 #7# *71*5* 吃饭'
# 找出数字 \d
result1 = re.findall(r'\d', s)  # 匹配规则前带上r的标记,表示字符串中转义字符无效,就是普通字符的意思
print(result1)
​
# 找出特殊字符 \W
result2 = re.findall(r'\W', s)
print(result2)
​
# 找出全部英文字母
result3 = re.findall(r'[a-zA-Z]', s)
print(result3)
​
# 匹配中文字符
result4 = re.findall(r'\u4e00-\u9fa5', s)  # 使用unicode编码范围
print(result4)
​
​
"""
简单理解正则符号的用法
"""
# 正则匹配手机号
# import re
# number = input('请输入需要识别的内容:')
# # 匹配1开头
# r1 = re.findall('^1\d{10}$', number)
# print(r1)
# # 匹配13开头
# r2 = re.findall('^13\d{9}$', number)
# print(r2)

正则表达式案例

import re
# 匹配账号,只能由字母和数字组成,长度限制6到10位
r = re.compile(r'^[0-9a-zA-Z]{6,10}$')  # 正则中无代码规范,无需使用空格分隔
s = '1234567ab'
print(re.findall(r, s))
​
​
# 匹配QQ号,要求纯数字,长度5-11,第一位不为0
r = re.compile(r'^[1-9][0-9]{4,10}$')
s = '12345678'
print(re.findall(r, s))
​
# 匹配邮箱地址,只允许qq、163、gmail这三种邮箱地址
r = re.compile(r'^(([\w-]+)@(qq|163|gmail)(\.[\w]+))$') # 如果正则表达式内由括号分组,会默认把每个括号的结果使用列表显示出来
s = 'zhangsan123123@163.com'
print(re.findall(r, s))