クローラーの基本(2)正規表現

正規表現の定義
文字列を使用して機能を説明し、別の文字列が機能と一致することを確認します

正規表現の構文

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.一般的な方法について

 - 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モジュールのグループ化機能(一致したコンテンツをフィルタリングして必要なコンテンツを見つける)して
グループ化()を行い、グループ()とグループ()を使用する

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