“”"
正则表达式:
语法:
import re
正则表达式的方法:直接将正则表示作为一个字符串内容(正则需要使用引号引起来) 匹配数据
— 导入re模块
import re
--- 使用match方法进行匹配操作
result = re.match(正则表达式,要匹配的字符串)
--- 可以使用group方法来提取数据
result.group()
找满足条件的第一个内容
re.search("正则表达式","查找的字符串") # 找到了返回 找到的对象 , 没有找到 返回None
re.search("正则表达式","查找的字符串").group() # 提取找到的 字符串
找满足条件的所有内容
re.findall("正则表达式","查找的字符串") # 返回的是一个列表
贪婪模式和非贪婪模式
在re模块中*,+,{n,} 获取多个 默认使用的是贪婪模式 取最多
# 非贪婪: 在贪婪的符号后 加"?" 例如: +? *? ?? {M, N}? {M,}? {, N}? #
1.匹配类符号
-- 普通字符 除了特殊符号意外的符号都是普通字符
-- 在[]中提供多个普通字符,匹配多个字符中的任意一个
-- [字符1-字符2] 匹配字符1-字符2的任意一个字符 - 这个减号的意思是到的意思
-- [\u4e00-\u9fa5] 匹配任意一个中文
-- [a-zA-Z] 匹配任意一个字母
-- 在[]中包含\开头的特殊符号 [\da-z] 具备特殊意义 匹配任意一个数字 或者任意一个小写字母
[\da-zA-z_\u4e00-\u9fa5] == \w
[az-]abc [] 那个就是只能匹配其中的一个
2.匹配次数
任何匹配类符号 后面都可以添加匹配次数对应的符号来控制字符的个数
-- + - 匹配一次或者匹配多次 至少一次
-- ? 匹配0次或者1次
-- {}
-- {N} N次
-- {M,N} M到N次
-- {M,} 至少m次
-- {,N}至少n次
3.分组和分支
-- 分组 就是用()将正则的部分内容括起来表示一个整体
-- (正则表达式){2} ()表示一个整体 {2} 控制次数 print(fullmatch(r'(\d\d[a-z]{3}){3}', '67kmn89ksm23kam'))
-- 重复 就是在正则中用\M来重复它前面M个分组匹配到的结果
-- 自动捕获案例
message=
-- 分支
-- | 匹配左右任意一个表达式 正则1|正则2...
-- (ab) 将括号中字符作为一个分组
-- \num 引用分组num匹配到的字符串
-- (?P<name>) 分组起别名
-- (?P=name) 引用别名为name分组匹配到的字符串
4.检测类符号
5.转义符号
-- 具有转义的符号前面加上'\'让这个转义符号变成普通符号 除了\开头的特殊符号 其他符号放在[]中对应的特殊功能会自动消失
fullmatch(正则,字符串) 完全匹配
findall(正则,字符串) 匹配字符串开头
split(正则,字符串) 提取字符串中所有满足正则的子串作为切割点对字符串进行切割
sub(正则,字符串1,字符串2) 将字符串2中所有满足正则的子串都替换成字符串1
findall(正则,字符串) 提取字符串中所有满足正则的子串,返回一个迭代器,迭代器中的元素就是匹配的对象
“”"
import re
from re import *
tel = “12122134589”
print(fullmatch(r’1[3-9]\d{9}‘, tel) != None) # 判fullmatch(正则表达式,字符串) - 判断字符串和正则表达式是否完全匹配 返回值 FALSE
print(fullmatch(r’1[3-9]\d{9}’, tel)) # 判fullmatch(正则表达式,字符串) - 判断字符串和正则表达式是否完全匹配 返回值 空
print(fullmatch(r’abc’, ‘abc’)) # 普通的字符 匹配长度是3的 ‘abc’ 那只能是abc了
print(fullmatch(r’a.c’, ‘abc’)) # .匹配任意一个字符
print(fullmatch(r’a\dc’, ‘a1c’)) # \d匹配任意一个数字
print(fullmatch(r’a\sc’, ‘a c’)) # \s 匹配任意一个空白字符 回车 空格(’ ‘) \t
print(fullmatch(r’a\s\s’, 'a\t\n ‘)) # \s 匹配任意一个空白字符 回车 空格(’ ‘) \t
print(fullmatch(r’a\wa’, 'a_a ')) # 匹配任意一个数字 字母 下划线或者中文
\S 非空白 \D 非数字 \W 匹配任何非单词字符.等同于[^a-zA-Z0-9_]
print(fullmatch(r’1[3-9]d’, ‘14d’)) # 在[]中提供多个普通字符,匹配多个字符中的任意一个
ret = re.match(“.”, “M”)
print(ret.group())
print(fullmatch(r’a{2}\d’, ‘aa1’)) # 有两次数字
print(fullmatch(r’\+', ‘\’)) # 至少两次斜杠
data = ‘萝莉cute@163.com’
fullmatch(r’\d’)
data = ‘67kmn89ksm23kam’
print(fullmatch(r’(\d\d[a-z]{3}){3}‘, ‘67kmn89ksm23kam’))
message = ‘<123>’
result = fullmatch(r’<\d\d*>', message)
print(result)
import re
水果列表
fruit_list = [“apple”, “banana”, “orange”, “pear”]
遍历数据
for value in fruit_list:
# | 匹配左右任意一个表达式
match_obj = re.match(“apple|pear”, value)
if match_obj:
print(“%s是我想要的” % match_obj.group())
else:
print(“%s不是我要的” % value)
match_obj = re.match(“[a-zA-Z0-9_]{4,20}@(163|126|qq|sina|yahoo).com”, “hello@163.com”)
if match_obj:
print(match_obj.group())
# 获取分组数据
print(match_obj.group(1))
else:
print(“匹配失败”)
match_obj = re.match(“<[a-zA-Z1-6]+>.*</[a-zA-Z1-6]+>”, “hh”)
if match_obj:
print(match_obj.group())
else:
print(“匹配失败”)
match_obj = re.match(“<([a-zA-Z1-6]+)>.*</\1>”, “hh”)
if match_obj:
print(match_obj.group())
else:
print(“匹配失败”)
match_obj = re.match(“<([a-zA-Z1-6]+)><([a-zA-Z1-6]+)>.*</\2></\1>”, “
www.itcast.cn
”)if match_obj:
print(match_obj.group())
else:
print(“匹配失败”)
match_obj = re.match(“<(?P[a-zA-Z1-6]+)><(?P[a-zA-Z1-6]+)>.*</(?P=name2)></(?P=name1)>”,
“
www.itcast.cn
”)if match_obj:
print(match_obj.group())
else:
print(“匹配失败”)