python网络基础之正则表达式

下面是我对正则表达式的一些简单介绍,它多用于爬虫,用来定制规则

# 正则表达式导入模块
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", "[email protected]").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

猜你喜欢

转载自blog.csdn.net/yilv12123/article/details/84643910
今日推荐