python爬虫之 ---------------- 正则表达式(1)

正则表达式

正则表达式简历:

正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。

在python中通过内置的re库来使用正则表达式,它提供了所有正则表达式的功能。

在这里插入图片描述

re模块:

在 Python 中,我们可以使用内置的 re 模块来使用正则表达式。 有一点需要特别注意的是,正则表达式使用 对特殊字符进行转义,所以如果我们要使用原始字符串,只需加一个 r 前缀。如:

代码演示:

import re

path1 = "c:\a\b\c"
#我们只需要打印c:a\b\c
print(path1) # c:\c


# \ 会对特殊字符串进行转义
path2 = "c:\\a\\b\\c"
print(path2) # c:\a\b\c


#我们需要输出原字符串,只需要加一个前缀r
path3 = r"c:\a\b\c"
print(path3) # c:\a\b\c

运行结果:
在这里插入图片描述

re 模块的一般使用步骤如下:

  1. 使用 compile() 函数将正则表达式的字符串形式编译为一个 Pattern 对象 。
  2. 通过 Pattern 对象提供的一系列方法对文本进行匹配查找,获得匹配结 果,一个 Match 对象。
  3. 最后使用 Match 对象提供的属性和方法获得信息,根据需要进行其他的 操作 。

compile 函数

compile 函数用于编译正则表达式,生成一个 Pattern 对象。

Pattern 对象的一些常用方法主要有:

  • match 方法:从起始位置开始查找,一次匹配
  • search 方法:从任何位置开始查找,一次匹配
  • findall 方法:全部匹配,返回列表
  • finditer 方法:全部匹配,返回迭代器
  • split 方法:分割字符串,返回列表
  • sub 方法:替换

findall 方法

搜索整个字符串,获得所有匹配的结果,使用的是findall()方法 findall 方法的使用形式如下: findall(string[, pos[, endpos]])
其中,string 是待匹配的字符串,pos 和 endpos 是可选参数,指定字符串的起 始和终点位置,默认值分别是 0 和 len (字符串长度)。
findall 以列表形式返回全部能匹配的子串,如果没有匹配,则返回一个空列表。
示例如下:

代码演示:

import re

# 1. 将正则表达式编译成一个 pattern 对象
pattern = re.compile("we")


# 2. 使用findall 方法 全局搜索,返回一个列表
m1 = pattern.findall("we are well welcome")
print(m1)


#使用 \b 字符进行匹配,只匹配we单词,不匹配其他含有we的单词
#1. 使用正则表达式是编译一个pattern对象
pattern = re.compile(r"\bwe\b")


#2. 使用findall 方法全局搜索,返回列表
m2 = pattern.findall("we are well Welcome")
print(m2)

运行结果:
在这里插入图片描述

常见字符串:

在这里插入图片描述
示例如下:

代码演示:

import re

# \d 匹配数字
pattern1 = re.compile("\d")
result1 = pattern1.findall("helll 123 v  907 v")
print(result1)  #['1', '2', '3', '9', '0', '7']


# \d+ 匹配一个或多个数字,如果是数字,则必须连续
pattern2 = re.compile("\d+")
result2 = pattern2.findall("i you me 2323 hu32 ")
print(result2)  #['2323', '32']


# \d{3,} 匹配 3次 或 多次 必须 连续
pattern3 = re.compile("\d{3,}")
result3 = pattern3.findall("he o0t87 bjv 345")
print(result3)

# \d{3} 连续匹配3次
pattern4 = re.compile("\d{3}")
result4 = pattern4.findall("huy 453f2 dder 2 3455")
print(result4)


# \d{1,2}可以匹配一次,也可以匹配2次,以更多的优先
pattern5 =re.compile("\d{1,2}")
result5 = pattern5.findall("huy 453f2 dder 2 3455")
print(result5)


# re.I 表示忽略大小写,[a-z]{5}匹配a-z的字母5次
pattern6 = re.compile("[a-z]{5}",re.I)
result6 = pattern6.findall("huypythonjava 453f2 dder 2 3455")
print(result6)


# re.I 表示忽略大小写,[a-z]{8}匹配a-z的字母8次
#只查找字符串0-8之间的字符,要前不要后【左闭右开】
pattern13 = re.compile("[a-z]{8}",re.I)
result13 = pattern13.findall("huppython 453f2 dder 2 3455",0,8)
print(result13)



# \w 匹配数字、字母、下划线  ,一次 或 多次
pattern7 = re.compile("\w+")
result7 =pattern7.findall("huy 453f2 dder 2 3455")
print(result7)



# \W+ 匹配不是下划线、字母、数字
pattern8 = re.compile("\W+")
result8 = pattern8.findall("huy 453f2 dder 2 3455")
print(result8)


# [\w\W]+ 可以匹配所有字符,一次 或 多次
pattern9 = re.compile("[\w\W]+")
result9 = pattern9.findall("hu@#y 45$$$3f2 dder 2 3455")
print(result9)



# [abc]+ 匹配 a 或 b 或 c 一次 或 多次
pattern10 = re.compile("[abc]+")
result10 = pattern10.findall("huy 453abcf2 ddaber 2c 3455")
print(result10)



# [^abc[123]+ 匹配不是abc 或 12 的字符
pattern11 = re.compile("[^abc[123]+")
result11 = pattern11.findall("huy 453abcf2 ddaber 2c 3455")
print(result11)



# .* 匹配任意字符,除了换行符
pattern12 = re.compile(".*")
result12 = pattern12.findall("huy 453abcf2 ddaber 2c 3455")
print(result12)

运行结果:
在这里插入图片描述

今天先写这里啦
在这里插入图片描述

发布了49 篇原创文章 · 获赞 5 · 访问量 2001

猜你喜欢

转载自blog.csdn.net/qq_44619595/article/details/104400434