爬虫学习-day2-regular总结
1.os模块
import os
# os.mkdir(文件路径) - 在指定的位置创建指定文件夹
# os.mkdir('filse/test')
# os.path.exists(文件夹路径/文件路径) - 判断指定文件夹或者文件是否存在
os.path.exists()
2.regular 表达式
# 1.正则表达式
#正则表达式是一种可以让复杂的字符串变得简单的工具
# 写正则表达式就是用正则符号来描述字符串规则
from re import fullmatch,findall,search,match,finditer,split,sub
# 1.re模块 - 提供python中所有和正则相关的函数
# fullmatch(正则表达式,字符串) - 判断整个字符串是否满足正则表达式所描述的的规则
# findall(正则表达式,字符串) - 提取字符串中满足正则表达式的字符串
# search(正则表达式,字符串) - 匹配字符串中第一个满足正则表达式的字符串
# 注意:python中表达式一个正则表达式一般使用r字符串
2.正则符号
-
普通符号 - 在正则表达式中表示符号本身的符号
result = fullmatch(r'abc', 'abc') print(result)
-
. - 匹配任意字符
result = fullmatch(r'.bc','dbc') print(result)
-
\d - 匹配任意一个数字字符
result = fullmatch(r'\d\dabc','68abc')
-
\s - 匹配任意一个空白字符
# 空白字符:空格(' ')、换行('\n')、水平制表符('\t') result = fullmatch(r'123\sabc','123 abc')
-
\w - 匹配任意一个字母、数字、下划线、或者中文
result = fullmatch(r'abc\w123', 'abc和123') print(result)
-
\D、\S、\W - 分别和\d、\s、\w的功能相反
result = fullmatch(r'abc\D123', 'abc8123') print(result) # None
-
[字符集] - 匹配在字符集中任意一个字符
""" [abc] - 匹配a或者b或者c [abc\d] - 匹配a或者b或者c或者任意数字: [abc0123456789] [1-5] - 匹配字符1到字符5中的任意一个字符 [a-z] - 匹配任意一个小写字母 [A-Z] - 匹配任意一个大写字母 [a-zA-Z] - 匹配任意一个字母 [a-zA-Z\d] - 匹配任意一个字母或者数字 [a-z=%] [\u4e00-\u9fa5] - 匹配任意一个中文 """
result = fullmatch(r'abc[M9你]123', 'abc你123') print(result) result = fullmatch(r'abc[M9你\d]123', 'abc0123') print(result) result = fullmatch(r'abc[\u4e00-\u9fa5]123', 'abc和123') print(result)
-
[^字符集] - 匹配不在字符集中的任意一个字符
result = fullmatch(r'ab[^MN]cd','ab)cd') print(result) result = fullmatch(r'abc[^a-z]123', 'abc$123') print(result) result = fullmatch(r'abc[M^N]123', 'abcM123') print(result)
3.匹配次数的符号
-
* - 任意次数(0次或者1次或者多次)
""" a* - a出现任意多次 \d* - 任意数字任意次数 [abc]* - 多个abc """
result = fullmatch(r'1a*2', '1aaaaaaaa2') print(result)
-
+ - 一次或者多次(至少一次)
result = fullmatch(r'1a+2', '1aaa2') print(result)
-
? - 0次或者1次
result = fullmatch(r'1a?2', '1aa2') print(result) # None
-
{}
""" {N} - N次 {M,N} - M到N次 {M,} - 最少M次 {,N} - 最多N次 """
-
贪婪和非贪婪模式
""" 在匹配次数不确定的时候,如果有多种次数都可以匹配成功,贪婪取最多的那个次数,非贪婪取最少的那个次数。 贪婪模式:+、?、*、{M,N}、{,N} 非贪婪模式:+?、??、*?、{M,N}?、{,N}? """
第三类符号:分组和分支
-
分组 - ()
""" 正则表达式中可以用()将部分内容括起来表示一个整体;括号括起来的部分就是一个分组 a.整体操作的时候需要分组 b.重复匹配 - 正则中可以通过\M来重复它前面第M个分组匹配的结果 c.捕获 - 提取分组匹配到的结果(捕获分为自动捕获(findall)和手动捕获) """
-
分支 - |
""" 正则1|正则2|正则3|…… - 先用正则1进行匹配,匹配成功直接成功;匹配失败用正则2进行匹配 """
# 转义符号:在本身具有特殊功能或者特殊意义的符号前加入\,让特殊符号变成普通 # 注意:单独存在有特殊意义的符号,在[]中它的功能会自动消失 result = fullmatch(r'\d[+.?*()\]]\d','3+4')
4.reModule
from re import fullmatch,findall,search,split,sub,finditer,match
"""
1)fullmatch(正则,字符串) - 用整个字符串和正则,匹配成功返回匹配对象,匹配返回None
2)findall(正则,字符串) - 获取字符串中满足正则的子串,默认返回一个列表,列表的元素是所有匹配到的子串(存在自动捕获现象)
3)search(正则,字符串) - 匹配第一个满足正则的子串,匹配成功返回匹配对象,匹配失败返回None
4)split(正则,字符串) - 将字符串中所有满足正则的子串作为切割点进行切割
5)split(正则,字符串,[N]) - 将字符串中前N个满足正则的子串作为切割点进行切割
6)sub(正则,字符串1,字符串2) - 将字符串2中所有满足正则的子串都替换成字符串1
7)sub(正则,字符串1,字符串2,N) - 将字符串2中前N个满足正则的子串都替换成字符串1
8)finditer(正则,字符串) - 获取字符串中所有满足正则的子串,返回-一个迭代器,迭代器中的元素是匹配对象
9)match(正则,字符串) - 匹配字符串开头
"""
str1 = '技术7晋级赛7jsks7就开始看'
print(str1.split('7', 2))
str1 = '技术22晋级赛709jsks511就开始80看'
print(split(r'\d+', str1, 2))
str1 = '技术22晋级赛709jsks511就开始80看'
print(sub(r'\d', '+', str1))
-
忽略大小写(?i)
print(fullmatch(r'(?i)abc','ABC'))
-
单行匹配:(?s)
# 多行匹配(默认):.不能和换行符匹配 # 单行匹配:.可以和换行符进行匹配 print(fullmatch(r'(?s)abc.123','abc\n123')) print(fullmatch(r'abc.123','abc\n123'))