python正则表达式

爬虫程序:能自动从相关网页中搜索与提取所需数据的程序。

爬虫工作程序:获取该网站的HTML代码,解析HTML代码,提取代码中的数据。

爬虫程序的关键就是解析与提取html中的数据,而正则表达式就是解析与提取HTMl代码中数据的一种较为简单的方法。

一、正则表达式

1、 \d :匹配0~9的一个数值

python 复制代码
import re
reg = r "\d"
m = re.search(reg,"abc12345cd")
print(m)

结果:

python 复制代码
<re.Match object; span=(3, 4), match='1'>

匹配结果是:1

2、+ :字符+可以重复前面的一个匹配字符一次或者多次

python 复制代码
import re
reg = r"b\d+"
m = re.search(reg,"a12b1234")
print(m)

结果:

python 复制代码
<re.Match object; span=(3, 8), match='b1234'>

匹配结果是:b1234
注意: r"b\d+"表示第一个字符要匹配 "b" ,后面是连续的过个数值,因此匹配的是b1234

3、* 表示重复前边的一个匹配字符0次或者多次。

注:加号和星号的匹配机制类似,但有区别在于 * 可以匹配到0次。

python 复制代码
import re
reg = r"ab+"
m = re.search(reg, "acabc")
print(m)
reg1 = r"ab*"
m1 = re.search(reg1, "acabc")
print(m1)

结果:

python 复制代码
<re.Match object; span=(2, 4), match='ab'>
<re.Match object; span=(0, 1), match='a'>

r "ab+ "的匹配机制是匹配到"ab":。

r "ab*"的匹配是"a",b可以是0或者多次。

4、? :表示重复前面的一个匹配字符0次或者1次

python 复制代码
import re
reg = r"ab?"
m = re.search(reg, "abbcabc")
print(m)

结果:

python 复制代码
<re.Match object; span=(0, 2), match='ab'>

匹配结果是ab,但是只匹配了1次

5、字符 . 代表任意字符,但是没有特别声明时,不代表任何字符

python 复制代码
import re
s = "xaxby"
m = re.search(r"a.b", s)
print(m)

结果:

python 复制代码
<re.Match object; span=(1, 4), match='axb'>

__.__代表了字符"x"

6、 " | "表示 | 符号左右两个部分任意匹配一个

python 复制代码
import re
s = "xaababy"
m = re.search(r"ab|ba", s)
print(m)

结果:

python 复制代码
<re.Match object; span=(2, 4), match='ab'>

匹配"ab"或者匹配"ba"都可以

7、特殊字符使用" \ "引导

例如

  • \r 表示回车符,
  • \n 表示换行符 ,
  • \t 表示制表符 ,
  • \ \ 表示反斜线本身。

8、字符 \b 表示单词结尾,各种空白字符或者字符串结尾都是单词结尾。

python 复制代码
import re

reg = r"car\b"
m = re.search(reg, "The car is black")
print(m)

结果:

python 复制代码
<re.Match object; span=(4, 7), match='car'>

匹配结果是 "car",因为car后边有一个空格

9、 中的字符可以对任选一个

如果字符是ASCII中的连续的一组,那么可以使用"_"连接。

例如:0-9表示0-9中的一个数字。

A- Z表示A- Z中的一个大写字符。

0- 9A\~ Z表示0- 9中的要给数字或者A~Z中的一个大写字母。

python 复制代码
import re
reg = r"x[0-9]y"
m = re.search(reg, "xyx2y")
print(m)

结果:

python 复制代码
<re.Match object; span=(2, 5), match='x2y'>

匹配结果是x2y

10、^出现在 中第一个字符位置,表示取反

例如\^ab0-9表示不是a,b,也不是0-9之间的数字。

python 复制代码
import re
reg = r"x[^ab0-9]y"
m = re.search(reg, "xayx2yxcy")
print(m)

结果:

python 复制代码
<re.Match object; span=(6, 9), match='xcy'>

匹配结果是"xcy"

11、\s匹配任何空白字符,

\s等价于\\r\\b\\x20\\t\\f\\v

12、\w匹配下划线、英文、数字等字符

\w等价于a-zA-Z0-9

python 复制代码
import re
reg = r"\w+"
m = re.search(reg, "python is easy")
print(m)

结果:

python 复制代码
<re.Match object; span=(0, 6), match='python'>

匹配结果是python,因为加号匹配1次或者多次,\w匹配下划线、英文、数字等字符

13、^匹配字符串的开头位置。

python 复制代码
import re
reg = r"^ab"
m = re.search(reg, "cabcab")
print(m)

结果:

python 复制代码
None

因为没有以ab开头的字母

14、$ 匹配字符的结尾位置

python 复制代码
import re
reg = r"ab$"
m = re.search(reg, "cabcab")
print(m)

结果:

python 复制代码
<re.Match object; span=(4, 6), match='ab'>

经常匹配字符串的结尾位置

15、() 经常与+,*, ? , 等一起使用,对()内的部分进行重复。

python 复制代码
import re
reg = r"(ab)+"
m = re.search(reg, "ababcab")
print(m)

结果:

python 复制代码
<re.Match object; span=(0, 4), match='abab'>

匹配结果是abab,因为+对ab进行了重复。

相关推荐
大数据魔法师1 小时前
DuckDB高阶实战指南!多文件处理、窗口函数、性能调优、工程化落地
python·数据分析
李永奉1 小时前
C语言-嵌入式开发C语言常用预处理指令合集
c语言·开发语言
Patrick在香港2 小时前
Python Docker镜像从1.2GB到89MB:多阶段构建的完整优化实录
java·python·docker·信息可视化·容器·数据分析·ai编程
上海安当技术2 小时前
敏感数据怎么防拖库?信封加密(DEK+KEK 二层密钥)架构设计与 Java 实战
java·开发语言·python
我是唐青枫2 小时前
Java JCommander 实战详解:用注解解析命令行参数
java·开发语言
大鹏说大话2 小时前
C++ 内存布局详解:类、虚函数、虚表底层原理
java·开发语言
键盘会跳舞2 小时前
C++:容器适配器 queue 的源码级拆解
开发语言·c++·queue
QAQo7T3 小时前
Python组蓝桥杯备赛超详细知识点总结笔记_排序算法篇
笔记·python·算法·蓝桥杯·排序算法
醉颜凉3 小时前
蓝桥杯2025年第十六届省赛真题-最大数字 Python题解
python·职场和发展·蓝桥杯
Loge编程生活3 小时前
打卡信奥刷题(3449)用C++实现信奥题 P10429 [蓝桥杯 2024 省 B] 拔河
开发语言·数据结构·c++·算法·青少年编程