爬虫基础(二)正则表达式

正则表达式定义
用一个字符串描述一个特征,然后进行验证另外一个字符串是否符合特征

正则表达式语法

import re
result = re.match( "正则表达式""要匹配的字符串")
# re.match(r'lcl' , 'lcl')
r.group()  #   如果上一步匹配到数据, 提取匹配到的数据

1、正则表达式中的普通字符

			- 字母、数字、汉字、下划线、没有特殊定义的符号,均为普通字符,普通字符只匹配字符本身。

2、元字符

		-  .     #	(小数点)     匹配除了/n  以外的任意一个字符
	 	-  |     #	逻辑或操作符
	 	-  []    #	匹配字符集中的一个字符
	 	-  [^]   #  对字符集求反,也就是上⾯的反操作。尖号必须在⽅括号⾥的最前⾯
	 	-   -    # 	定义[]⾥的⼀个字符区间,例如[a-z]
	 	-   \    #	对紧跟其后的⼀个字符进⾏转义
	 	-   ()   #	 对表达式进⾏分组,将圆括号内的内容当做⼀个整体,并获得匹配的值

3、转义字符

 		- \r,\n		# 匹配回车核换行符
 		- \t		# 匹配制表符
 		- \\		# 匹配斜杠 \
 		- \^		# 匹配^符号
 		- \$		# 匹配$ 符号
 		- \.		# 匹配小数点

4、预定义匹配字符集

		- \d	    # 任意一个数字(0-9)
 		- \w		# 任意字母、数字、下划线(含大小写)
		- \s		# 空格、制表符、换页符
 		- \D		# \d 的反集、非数字的任意一个字符
 		- \W		# \w的反集、
 		- \S		# \s 的反集

5、重复匹配

		 - {n}		# 表达式重复n次 (/d{2})
		 - {m,n}	# 表达式至少重复m次,最多重复n次
		 - {m,}		# 表达式最少重复m次
		 -# 匹配表达式0次或1次
		 - +		# 表达式至少出现1次
		 - *		# 表达式出现0次或任意次

6、位置匹配

		 - ^ 		# 在字符串开始的地方匹配
		 - $		# 在字符串结束的地方匹配
		 - \b		# 匹配一个单词边界,也就是单词和空格之间的位置
		 - \B		# 匹配非边界单词

7、贪婪与非 贪婪模式

				- 贪婪匹配 :在重复匹配时,正则表达式默认总是尽可能多的匹配  (.*)
				- 非贪婪匹配 : 尽可能少的匹配 (.* ?)

8、 re 常用方法

 - complile(pattern [ , flags= 0 ])     		# 根据包含正则表达式的字符串创建模式对象    返回值   re 对象(flags 匹配模式)
 - search (pattern, string [ , flags ])     	# 在字符串中查找    对一个匹配到的对象,或None
 - match  (pattern, string [ , flags ]) 		# 在字符串开始处匹配模式
 - split  (pattern, string [ ,maxsplit = 0, flags ])      # 根据模式的 匹配项来分割字符串
 - findall  (pattern, string [ , flags ])		# 列出字符串中模式的所有匹配项
 - sub(pat,repl,string[,count = 0,flags]# 将字符串中所有的pat的匹配项用repl替换

9、re模块分组功能(对已经匹配的内容进行筛选出需要的内容)
实现分组用 (),获取的分组内容用 group()、groups()

match() 方法
# 不分组时情况
import re
origin = "hasdfi123123safd"
r = re.match("h\w+",origin)
print(r.group())   # 获取匹配的整体结果   ——   hasdfi123123safd
print(r.groups())   # 获取模型中匹配到的分组结果元组 —— ()

# 分组时情况
import re
origin = "hasdfi123123safd"
r = re.match("h(\w+).*(?P<name>\d)$", origin)  # .* 贪婪匹配   ?P<name>:分组的名称 
print(r.group()) # 获取匹配到的整体结果
print(r.group(1)) # 获取匹配到的分组1的结果
print(r.group(2)) # 获取匹配到的分组2的结果
print(r.groups()) # 获取模型中匹配到的分组结果元组

#执⾏结果:
hasdfi123123safd123
asdfi123123safd12
3
('asdfi123123safd12', '3')

groups()  # 将匹配到的结果放到元组中
print(r.groups()) # 获取匹配到的整体结果
#执⾏结果:
(asdfi123123safd12,3# search() 方法分组
import re
origin = "sdfi1ha23123safd123"
r = re.search("h(\w+).*(?p<name>\d)$",origin)
print(r.group())
print(r.group(0))
print(r.group(1))
print(r.group(2))
print(r.groups())

#执⾏结果:
ha23123safd123
ha23123safd123
a23123safd12
3
('a23123safd12', '3')


# findall() 方法

import re
origin = "has something have do"
# ⽆分组
r = re.findall("h\w+", origin)
print(r)

#执⾏结果:
['has', 'hing', 'have']

import re
origin = "has something have do"
# ⼀个分组
r = re.findall("h(\w+)", origin)
print(r)

#执⾏结果:
['as', 'ing', 'ave']


import re
origin = "hasabcd something haveabcd do" # 字符串调整了⼀下
# 两个分组
r = re.findall("h(\w+)a(bc)d", origin)
print(r)

#运⾏结果:
[('as', 'bc'), ('ave', 'bc')]

#split() 方法


发布了50 篇原创文章 · 获赞 3 · 访问量 1798

猜你喜欢

转载自blog.csdn.net/weixin_43056654/article/details/103981858