Crawler basics (2) regular expressions

Regular expression definition
Use a string to describe a feature, and then verify that another string matches the feature

Regular expression syntax

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

1. Common characters in regular expressions

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

2. Metacharacters

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

3. Escape characters

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

4. Predefined matching character set

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

5. Repeat matching

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

6. Location matching

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

7. Greedy and non-greedy modes

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

8. Re common methods

 - 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. The re module grouping function (screening out the content that has been matched to the required content) to
achieve grouping (), and the grouping content obtained using 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() 方法


Published 50 original articles · Likes3 · Visits 1798

Guess you like

Origin blog.csdn.net/weixin_43056654/article/details/103981858