下面是我对正则表达式的一些简单介绍,它多用于爬虫,用来定制规则
# 正则表达式导入模块
import re
# match只匹配字符串的头
# re.match(正则表达式,需要处理的字符串)
re.match(r"hello", "hello world")
# 大小写的匹配
re.match(r"[Hh]ello", "Hello world")
re.match(r"[Hh]ello", "hello world")
# \d 0……9数字(单个字符) \D非数字
# [] 匹配括号中的字符
# \w a-z,A-Z,0-9,_(单个字符) \W非单词字符
# \s 匹配空白,即空格,tab键 \S非空白
# . 匹配任意一个字符(除了\n换行)
re.match(r"速度与激情[1-9]", "速度与激情8").group()
re.match(r"速度与激情\d", "速度与激情2").group()
re.match(r"速度与激情.", "速度与激情d").group()
re.match(r"速度与激情\w", "速度与激情_").group()
re.match(r"速度与激情\s", "速度与激情 1").group()
# {m} 匹配前一个字符出现的次数,m次
# {m,n} 前一个字符出现m到n次
# ? 前一个字符要么出现一次,要么不出现
# * 匹配前一个字符出现0次或无限次
# + 前一个字符至少出现1次或无限次
re.match(r"速度与激情\d{2}", "速度与激情15").group()
re.match(r"速度与激情\d{1,2}", "速度与激情4").group()
re.match(r"速度与激情\d{1,2}", "速度与激情45").group()
re.match(r"029-?\d{8}", "029-25252525").group()
re.match(r"029-?\d{8}", "02925252525").group()
re.match(r"029-+\d{8}", "029-25364563").group()
# \n \t \:代表转义
# ^匹配字符串开头 匹配字符串结尾$
# [^ ] 表示非空,遇到空就不匹配
# 匹配分组:
# | 匹配左右任意一个表达式
# () 将括号中的内容作为一个分组——————按组号去进行查看组的内容
re.match(r"([a-zA-Z0-9]{4,8})@(163|129)\.com", "laowang@129.com").group(2)
# 标签配对,进行组的匹配
re.match(r"<(\w*)>.*</\1>", "<h1>shhshhs</h1>").group()
# (?P<name>) 分组起名字
# (?P=name) 分组用名字
html_str = "<html><h1>www.yltenu.com</h1></html>"
re.match(r"<(?P<name1>\w*)><(?P<name2>\w*)>.*</(?P=name2)></(?P=name1)>",html_str).group()
re.match(r"<(?P<name1>\w*)><(?P<name2>\w*)>.*</(?P=name2)></(?P=name1)>",html_str).group()
# search 不用从头开始匹配 match 从头开始匹配
re.search(r"\d+", "阅读次数为:9999").group()
# findall 统计全部 返回值就是列表
re.findall(r"\d+", "python:999 ,java:5252 ,php:5252")
# sub 将匹配到的数据进行替换(全部替换) 1:正则 2:替换 3:字符串
re.sub(r"\d+", "1111", "python = 999")
# r 表示原生字符串,不必进行多次转义,造成反斜杠空扰
# split 字符串分割
re.split(r":| ", "jjfj:fjfj orpm:fklls") #空格,:进行分割
# 1,从语法角度看贪婪与非贪婪
# 被匹配优先量词修饰的表达式,使用的是贪婪模式;被忽略优先量词修饰的表达式,使用的是非贪婪模式
# 匹配优先量词包括:“{m,n}”、“{m,}”、“?”、“*”和“+”
# 默认情况下都是贪婪模式,在量词后面加上?就是非贪婪模式
# 2,从应用角度看贪婪与非贪婪
# 贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配;
# 而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配
# 3,从匹配原理角度看贪婪与非贪婪
# 能达到同样匹配结果的贪婪与非贪婪模式,通常是贪婪模式的匹配效率较高
# 所有的非贪婪模式,都可以通过修改量词修饰的表达式,转换为贪婪模式
# 贪婪模式可以与固化分组结合,提升匹配效率,而非贪婪模式却不可以
content = "tel is 029-2586-8963"
# 贪婪模式
print(re.match(r".+(\d+-\d+-\d+)", content).group(1))
# ----->9-2586-8963
# 非贪婪模式
print(re.match(r".+?(\d+-\d+-\d+)", content).group(1))
# ----->029-2586-8963