'''
re正则表达式
'''
import re
'''
# #1使用match方法进行匹配操作
# str1='13656782564'
# # 如果数据匹配成功,使用group方法来提取数据 查找字符串中是否包含指定字符
# result=re.findall('9',str1)
#
# print(result)
# # 2查找字符串是否有数值
# str1='abcd3feg'
# # 使用re模块结合正则表达式获取所有数字 \d表示数值
# result = re.findall('\d',str1)
# print(result)
# 获取字符串的非数字字符
str1 = 'abd3bcg!#@$%^'
# 使用re模块结合正则表达式获取所有数字 \D表示非数值
result = re.findall('\D',str1)
print(result)
'''
'''
# python正则表达式查什么
str1='w'
# match只能匹配第一个字符
g = re.match('.', str1)
print(g)
# 如果数据匹配成功,使用group方法来提取数据
print(g.group())
'''
# str2='0abc45defg'
# result=re.match('[0-9]',str2)
# print(result.group())
# ^0-9 匹配0-9之外的任意某个字符 默认匹配一个
# str3 = '$$123456'
# result=re.match('[^0-9]',str3)
# print(result.group())
str4 = '$$123456'
result=re.findall('[^0-9]',str4)
print(result)
print('-----------------')
# \s匹配空白,即 空格,tab键 \S匹配非空白
str6 = '$$123 456'
result=re.findall('\s',str6)
print(result)
str6 = '$$123456'
result=re.findall('\S',str6)
print(result)
print('----------------------')
# \w匹配非特殊字符,即a-z、A-Z、0-9、_ \W 匹配特殊字符,即非字母、非数字、非下划线
str6 = '!_$$123asd456'
result=re.findall('\w',str6)
print(result)
#查多少
'''
\w{6,10}
| * | 匹配前一个字符出现0次或者无限次,即可有可无(0到多) |
| + | 匹配前一个字符出现1次或者无限次,即至少有1次(1到多) |
| ? | 匹配前一个字符出现1次或者0次,即要么有1次,要么没有(0或1) |
| {m} | 匹配前一个字符出现m次,匹配手机号码\d{11} |
| {m,} | 匹配前一个字符至少出现m次,\\w{3,},代表前面这个字符最少要出现3次,最多可以是无限次 |
| {m,n} | 匹配前一个字符出现从m到n次,\w{6,10},代表前面这个字符出现6到10次 |
| 代码 | 功能 |
| ---- | ------------------------- |
| .(英文点号) | 匹配任意1个字符(除了\n) |
| [ ] | 匹配[ ]中列举的某个字符,专业名词 => 字符簇 |
| \[^指定字符] | 匹配除了指定字符以外的其他某个字符,^专业名词 => 托字节 |
| \d | 匹配数字,即0-9 |
| \D | 匹配非数字,即不是数字 |
| \s | 匹配空白,即 空格,tab键 |
| \S | 匹配非空白 |
| \w | 匹配非特殊字符,即a-z、A-Z、0-9、_ |
| \W | 匹配特殊字符,即非字母、非数字、非下划线 |
'''
print('----------------------------')
str1='123abc'
result=re.match('\d{3}',str1)
print(result.group())
str2='20220429abc.jpg'
result=re.match('.*',str2)
print(result.group())
# 定义一个字符串 匹配1或者10
str3='10'
result=re.match('10?',str3)
print(result.group())
print('---------------------')
#11位手机号
mobile='18654271083'
# ^定义以某个字符开头 意思必须以1开头 $ :定义以某个字符结尾 必须以数值结尾
result=re.match('^1[3456789]\d{9}$',mobile)
if result:
print('合理手机号')
else:
print('不合理')
print('---------------------------')
str7='abcdef123ghijklmn'
result1=re.search(r'\d(\d)(\d)',str7)
print(result1.group())
print(result1.group(1))
result2=re.search(r'\d{2}',str7)
print(result2.group())
str8='abcdef11111ghijklmn'
result2=re.search(r'(\d)\1\1',str8)
print(result2.group())
#选择匹配符
str = 'hellojava, hellopython'
result = re.finditer(r'hello(java|python)', str)
if result:
for i in result:
print(i.group())
else:
print('未匹配到任何数据')
'''
# 2、分组别名
| 代码 | 功能
| ---------- | ---------------------------
| (?P<name>) | 分组起别名
| (?P=name) | 引用别名为name分组匹配到的字符串
案例:匹配\<book>\</book>
'''
str1 = '<book></book>'
result = re.search(r'<(?P<mark>\w+)></(?P=mark)>', str1)
print(result.group())
email = '1478670@qq.com, go@126.com, heima123@163.com'
result = re.finditer('\w+@(qq|126|163).com', email)
if result:
for i in result:
print(i.group())
else:
print('未匹配到任何数据')
str1 = 'qq:10567345666'
result = re.split(r':', str1)
if result:
print(f'{result[0]}号:{result[1]}')
else:
print('未匹配到任何数据')
# 匹配出<html><h1>www.itcast.cn</h1></html>
str='<html><h1>www.itcast.cn</h1></html>'
result=re.search(r'<(?P<mark>\w+)><(?P<mark2>\w+)>[w]{3}(.)(\w+)(.)(\w+)</(?P=mark2)></(?P=mark)>',str)
if result:
print(result.group())
else:
print('未匹配到任何数据')
'''
flags: 匹配方式:
- re.I 使匹配对大小写不敏感,I代表Ignore忽略大小写
- re.S 使 . 匹配包括换行在内的所有字符
- re.M 多行模式,会影响^,$
'''
429正则表达式
最新推荐文章于 2024-10-30 13:16:11 发布