正则表达式的构成:
原子(普通字符,如英文字符)
元字符(有特殊功用的字符)
以及模式修正字符
注意:一个正则表达式中至少包含一个原子
正则表达式测试工具介绍:RegexBuddy
re.match(pattern,string,flags=0)
从头匹配一个符合规则的字符串,从起始位置开始匹配,匹配成功返回一个对象,未匹配成功返回None。
patter:正则模型
string:要匹配的字符串
flags:匹配模式
match()方法一旦匹配成功,就是一个match object对象,而match object 对象有以下方法:
# 导入模块
import re
# 通过match 方法,验证正则 re.match("正则表达式","要验证/检测的字符串")
#match()方法如果匹配成功,返回match object对象;如果匹配失败,返回None
result = re.match("\w{4,20}@163\.com$", "[email protected]")
# 判断 验证是否成功
if result:
print("匹配成功")
# 如果成功,获取匹配的结果
print("匹配结果:", result.group())
else:
print("匹配失败")
“|” 匹配左右任意一个表达式
“()” 将括号中字符作为一个分组,
分组整体匹配,result = re.match("\w{4,20}@(163|qq|126).com$", “[email protected]”)
可以提取子字符串:
import re
result = re.match("(\d{3,4})-(\d{7,8})", "0349-1234567")
if result:
print("匹配成功!")
print("匹配结果:", result.group())
print("提取区号:", result.group(1)) #第一个()中的内容
print("提取电话号码:", result.group(2))#第二个()中的内容
else:
print("匹配失败!")
“\num” 引用分组num匹配到的字符串,通俗理解就是引用前面一模一样的格式,格式刷,\1 引用第一组
import re
# result = re.match("<([a-zA-Z]*)>\w*\\1>", "hello") # 第一个\是转义字符
result = re.match("<([a-zA-Z0-9]+)><([a-zA-Z0-9]+)>.*\\2>\\1>", "hello
")
if result:
print("匹配成功!")
print("匹配结果:", result.group())
else:
print("匹配失败!")
“ (?P< name>) (?P=name)” 分组起别名,并且引用别名为name分组匹配到的字符串
result = re.match("<(?P[a-zA-Z0-9]+)><(?P[a-zA-Z0-9]+)>.*(?P=name2)>(?P=name1)>" ,
"hello
")
print(re.match(‘super’, ‘superstition’).span()) 会返回(0, 5)
print(re.match(‘super’, ‘insuperable’)) 则返回None
print(re.search(‘super’, ‘superstition’).span())返回(0, 5)
print(re.search(‘super’, ‘insuperable’).span())返回(2, 7)
result = re.findall("\\d+", "阅读次数:9999次,转发次数:883次,评论次数:3次")# 返回['9999', '883', '3']
ret = re.sub(r"\d+", "10000", "阅读次数:9999次,转发次数:883次,评论次数:3次")
# 返回 阅读次数:10000次,转发次数:10000次,评论次数:10000次
ret = re.split(r":| ","info:xiaoZhang 33 shandong")
# 返回 ['info', 'xiaoZhang', '33', 'shandong']
贪婪:满足正则的情况下,尽可能多的取内容,默认为贪婪模式
非贪婪:满足正则的情况下,尽可能少的取内容
把贪婪模式改为非贪婪模式,需要使用符号 ?在"*","?","+","{m,n}"后⾯加上?,使贪婪变成⾮贪婪。
result = re.match(r"aaa(\d+)", "aaa123456") #输出aaa123456
result = re.match(r"aaa(\d+?)", "aaa123456") # 输出aaa1
===================将img标签中的图片url提取出来===========================
import re
str1 = """
"""
result = re.search('src=\"(.*?)\"', str1)
if result:
print("匹配成功")
print("匹配结果:", result.group())
print("url地址:", result.group(1))
else:
print("匹配失败")
#匹配成功
#匹配结果: src="https://rpic.douyucdn.cn/appCovers/2016/11/13/1213973_201611131917_small.jpg"
#url地址: https://rpic.douyucdn.cn/appCovers/2016/11/13/1213973_201611131917_small.jpg
Python中在正则字符串前⾯加上 ‘r‘ 表示, 让正则中的 ‘’ *不再具有转义功能(默认为转义),就是表示原⽣字含义⼀个斜杠 *
result = re.match(r"<([a-zA-Z0-9]+)><([a-zA-Z0-9]+)>.*\2>\1>", "hello
")