使用影刀开发脚本、Python正则表达式

十七周内容笔记

使用影刀

影刀这个工具还是比较简单,智能且强大,简单的描述一下定时发送天气预报的一个功能
首先是打开网页
在这里插入图片描述
选择浏览器,这里我选择的是谷歌浏览器
在这里插入图片描述
输入找到的天气预报的网址
在这里插入图片描述
接着我们打开网页,是这样式儿的
在这里插入图片描述
接着我们选择获取元素
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
选择元素块
在这里插入图片描述
选择获取元素文本内容

在这里插入图片描述
最后选择邮件发送
在这里插入图片描述
在这里插入图片描述
到目前为止就可以选择保存并发版
在这里插入图片描述
创建触发器
在这里插入图片描述
在这里插入图片描述
应用选择刚刚编辑好的天气预报
在这里插入图片描述
设定好时间就可以启动了。
在这里插入图片描述
在这里插入图片描述

影刀作为一款大厂工具,体验上真的要比后裔采集器好一点,无论是界面观感还是功能实现都要比后羿采集器好用一点。

day51

01-正则的匹配类符号

一、正则表达式

什么是正则?

1.正则是一种可以让字符串处理变得很简单的工具。

2.正则就是通过各种正则符号来描述字符串的规则。

3,在不同的编程语言中正则语法相同,但是表达方式不同。

二、如何描述字符串(正则符号)

import re
# 1.普通字符在正则中表示这个符号本身-->普通符号
re_str = 'abc'
str_1 = '123abc456abcd'
result = re.findall(re_str, str_1)
# findall(正则符号,普通字符串):从普通字符串中按照正则符号匹配出所有符合的元素
print(result)
# 返回:['abc', 'abc']

# 2.匹配任意字符(通配符),使用.(点)-->通配符
re_str_1 = 'a.c'
result = re.findall(re_str_1, 'abca1ca2cacca22c')
print(result)
# 返回:['abc', 'a1c', 'a2c', 'acc']

# 3.匹配一个任意数字--> \d,匹配一个任意非数字--> \D
result = re.findall('a\dc', 'abca1ca2cacca22c')
print(result)
# 返回:['a1c', 'a2c']

result = re.findall('a\Dc', 'abca1ca2cacca22c')
print(result)
# 返回:['abc', 'acc']

# 4.匹配一个空白字符-->\s,匹配一个非空白字符-->\S
# 空白符号:空格、\n、\t等
result = re.sub('\s', '', 'abc\n123\t456     789')
# sub('正则符号',替换为什么, 从哪里匹配替换):按照正则符号去匹配,匹配到的结果替换为某符号
print(result)
# 返回:abc123456789

result = re.sub('\S', '1', 'abc\n123\t456     789')
print(result)
# 返回:111	111     111

# 5.匹配字母、数字、下划线--> \w(不重要)
# 其实\w 还可以匹配中文,但是一般不使用\w 匹配
result = re.findall('a\wc', 'abca1ca_cacca22ca-c')
print(result)
# 返回:['abc', 'a1c', 'a_c', 'acc']
# 6.匹配字符集中的出现过的任意一个符号-->[字符集]
# 注意:
# a.一个[]只能匹配一个符号。
# b.在[]中可以将 - 放在两个字符中间表示范围,必须保证 - 前面的符号的编码值小于 - 后面的编码值。
# c.在[]中 - 只有在两个字符之间才具有特殊意义,否则只是表示它本身,
# - 符号只能出现在 3 个位置:两个编码值符合规则的符号之间,或者[]最前面或者最后面。
# d.表示取反:在[]最开头写一个^
result = re.findall('[-1-9a-z_A-Z]', 'abcd1234-+ABCD')
# [-1-9a-z_A-Z]:匹配字符集中的任意一个符号
print(result)
# 返回:['a', 'b', 'c', 'd', '1', '2', '3', '4', '-', 'A', 'B', 'C', 'D']
result = re.findall('[^-1-9a-z_A-Z]', 'abcd1234-+ABCD')
# [^-1-9a-z_A-Z]:匹配不属于字符集中的任意一个符号
print(result)
# 返回:['+']
# [a1+]:匹配 a 或者 1 或者+
# [\dxy]:匹配任意一个数字或者 x 或者 y
# [\u4e00-\u9fa5]:匹配所有中文

# 匹配一个11位手机号,'手机号为12345678900'
result = re.findall('\d\d\d\d\d\d\d\d\d\d\d', '手机号为12345678900')
print(result)
# 返回:['12345678900']

02-正则的重复类符号

import re

# 重复类符号特点:要写在一个符号后面,表示针对这个符号的重复次数

# +:表示匹配一次或多次
result = re.findall('a+c', 'aaacaacacc')
print(result)
# 返回:['aaac', 'aac', 'ac']

# ?:表示匹配 0 次或 1 次
result = re.findall('a?c', 'aaacaacacc')
print(result)
# 返回:['ac', 'ac', 'ac', 'c']

# *:匹配任意次数
result = re.findall('a*c', 'aaacaacacc')
print(result)
# 返回:['aaac', 'aac', 'ac', 'c']

# {N, M}:控制匹配次数
# {N} -> 匹配 N 次
# {N, M} -> 最少匹配 N 次,最多匹配 M 次
# {N, } -> 最少匹配 N 次,上不封顶
# {, M} -> 最多匹配 M 次

result = re.findall('\d{11}', '手机号为12345678900, 身份证号为123456789000100101')
print(result)
# 返回:['12345678900', '12345678900']

# (重要)贪婪和非贪婪
# 在匹配次数不确定的时候,匹配分为贪婪和非贪婪,默认都是贪婪的。
# 贪婪:在能匹配成功的前提下,取一次匹配最多符号的结果。
# 贪婪:+、*、{N,}、{N, M}、{, M}
# (一次能匹配到 5 个符号、同时还能一次匹配到9个、10个、13个,贪婪一定是取13个)
result = re.findall('a.+b', 'amnmb123bblkb')
print(result)
# 返回:['amnmb123bblkb']
# 非贪婪:在能匹配成功的前提下,取一次匹配最少符号的结果。
# 非贪婪:如果不想使用贪婪匹配,直接在贪婪匹配基础上添加?
# +?、*?、{N,}?等
result = re.findall('a.+?b', 'amnmb123bblkb')
print(result)
# 返回:['amnmb']

# 案例:从 a 标签中匹配网址
html_source = '<a href="www.baidu.com">百度</a><a href="www.taobao.com">百度</a>'
# 贪婪(错误结果)
result = re.findall('www.+com', html_source)
print(result)
# 返回:['www.baidu.com">百度</a><a href="www.taobao.com']
# 非贪婪
result = re.findall('www.+?com', html_source)
print(result)
# 返回:['www.baidu.com', 'www.taobao.com']

03-正则的检测类符号

检测类符号:一个符号需要对应一个字符;检测类符号不影响匹配字符串的长度,只是在匹配成功以后对字符串做一次检测。

import re
# ^ -> 检测是否是字符串的开头
# 判断到 ^所在位置不是a33字符串的开头
# ^\d\d -> 判断^所在位置(第一个\d匹配出的元素)是否是字符串开头
result = re.findall('^\d\d', 'a33')
print(result)

result = re.findall('^a\d', 'a33')
print(result)
# 返回:['a3']

# $ -> 检测是否是字符串的结尾
result = re.findall('\d\d$', 'a33')
print(result)
# 返回:['33']

result = re.findall('a\d$', 'a33')
print(result)
# 返回:[]

04-正则的分组、分支、转义字符

分组就是将正则的某一部分使用()括起来看成一个整体,然后进行整体操作,在正则中一个()就是一个分组

import re

# 案例:获取第一组三位数组789
# 一整个正则表达式先将粗略的结果匹配出来 \d{3}ab
# 然后将需要获取的部分再加分许,就能使用findall只拿到分组部分
result = re.findall('\d{3}ab', '789ab788')
print(result)
# 返回:['789ab']
result = re.findall('(\d{3})ab', '789ab788')
print(result)
# 返回:['788']

# 获取 a 标签内的网址
html_source = '<img src="www.111.com"><a href="www.baidu.com">百度</a><a href="www.taobao.com">淘宝</a>'
result = re.findall('a href="(www.+?com)"', html_source)
print(result)
# 返回:['www.baidu.com', 'www.taobao.com']

# 如果分组套分组,每一个大分组和每一个小分组匹配的结果会组成一个元组
html_source = '<img src="www.111.com"><a href="www.baidu.com">百度</a><a href="www.taobao.com">淘宝</a>'
result = re.findall('a href="(www(.+?)com)"', html_source)
print(result)
# 返回:[('www.baidu.com', '.baidu.'), ('www.taobao.com', '.taobao.')]

# 二、分支使用|
# 正则1|正则2 -> 分支其实就是或者
result = re.findall('abc([1-9]{3}|[a-z]{2})', 'abcaa123')
print(result)
# 返回:['aa']

result = re.findall('abc[1-9]{3}|[a-z]{2}', 'abcaabc123')
print(result)
# 返回:['ab', 'ca', 'abc123']

# 三、转义符号:\
# \被添加到某个正则符号前面,能够将这个正则符号转为普通符号
# 获取www.和.com之间只有5个符号的网址
html_source = '<img src="www.111.com"><a href="www.baidu.com">百度</a><a href="www.taobao.com">淘宝</a>'
result = re.findall('="(www\..{5}\.com)"', html_source)
# www\.在正则中表示www.这四个普通符号
print(result)
# 返回:['www.baidu.com']

# \\d 表示什么? -> \d
result = re.findall('\\\d', 'a\d1c')
print(result, result[0])
# 返回:['\\d'] \d

# 列表:列表中的元素如果是字符串,那么这个字符串会完整显示

06-re模块常用方法

findall(正则,字符串):获取字符串中所有满足正则表达式的子串,返回一个列表。

sub(正则,字符串1,字符串2):替换,将字符串2中满足正则的子串替换为字符串1。

split(正则,字符串):将字符串中满足正则的子串进行切割。

fullmatch(正则,字符串):判断正则是否能完全与字符串匹配,如果能匹配,返回匹配对象,否则为None。

match(正则,字符串):判断字符串开头部分是否与正则匹配,如果能匹配,返回匹配对象,否则为None。

search(正则,字符串):从字符串中查找第一个满足正则的子串,如果查找成功,返回查找对象,否则为None。

import re
str1 = 'a1ca2ca3ca4c'
print(re.match('a.c', str1))
# 返回:<re.Match object; span=(0, 3), match='a1c'>
print(re.fullmatch('a.c', str1))
# 返回:None
print(re.fullmatch('a.+c', str1))
# 返回:<re.Match object; span=(0, 12), match='a1ca2ca3ca4c'>
print(re.search('a3c', str1))
# 返回:<re.Match object; span=(6, 9), match='a3c'>
print(re.findall('a.c', str1))
# 返回:['a1c', 'a2c', 'a3c', 'a4c']
print(re.split('\d', str1))
# 返回:['a', 'ca', 'ca', 'ca', 'c']
print(re.sub('\d', 's', str1))
# 返回:ascascascasc

# 正则匹配中可能涉及的坑?
# 1.字符串多行匹配(默认是单行匹配)
str_1 = """abcd
123c
"""
result = re.findall('a.+c', str_1, flags=re.S)
print(result)
# re.S:通配符.(点)默认不匹配\n,re.S能够让.(点)认识\n,让.能够进行多行匹配

# 2.正则表达式大小写不敏感
str_2 = 'abcABC'
result = re.findall('abc', str_2, flags=re.I)
print(result)
# 返回:['abc', 'ABC']
# 如果正则表达式写起来很麻烦,尤其对大小写字母匹配,可以直接接著re.I,忽略掉大小写
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在 Python 中,可以使用内置的 re 模块调用正则表达式。 首先,需要导入 re 模块: ```python import re ``` 然后,可以使用 re 模块提供的函数来调用正则表达式,例如: ```python # 匹配字符串中的数字 result = re.findall('\d+', 'hello 123 world') print(result) # 输出 ['123'] ``` 这里使用了 re.findall() 函数来查找字符串中的数字。正则表达式 '\d+' 表示匹配一个或多个数字。 需要注意的是,在编写正则表达式时,需要使用特定的语法来表示不同的匹配规则。可以参考 Python 官方文档中关于正则表达式的说明来深入学习。 ### 回答2: 在Python中,我们可以使用re模块来调用正则表达式。 首先,我们需要导入re模块: ``` import re ``` 然后,可以使用re模块提供的函数来进行正则表达式的匹配和操作。 常用的函数有: - match(pattern, string):从字符串的开头开始匹配,如果匹配成功返回一个匹配对象,否则返回None。 - search(pattern, string):在字符串中搜索第一个匹配的地方,如果匹配成功返回一个匹配对象,否则返回None。 - findall(pattern, string):返回字符串中所有匹配的结果组成的列表。 - sub(pattern, repl, string):将字符串中所有匹配的地方替换为指定的字符串。 - split(pattern, string):根据指定的正则表达式分割字符串,并返回分割后的部分组成的列表。 以下是一个简单的例子,展示了如何使用正则表达式进行匹配: ```python import re # 匹配字符串中的数字 pattern = r'\d+' # 匹配连续的数字 string = 'Hello123World456' result = re.findall(pattern, string) print(result) # 输出:['123', '456'] ``` 另外,我们还可以通过在正则表达式使用特定的语法来实现更复杂的匹配,例如使用字符集、量词、分组等。 总结一下,Python中的re模块提供了丰富的函数和语法来调用正则表达式,使我们能够方便地进行字符串的匹配和操作。 ### 回答3: Python正则表达式库re(regular expression)可以通过调用相关函数来进行操作。以下是使用Python正则表达式的一般步骤: 1. 导入re库:在Python脚本中,首先需要导入re库,使用`import re`语句。 2. 创建正则表达式模式:使用re库的函数,例如re.compile(),创建一个正则表达式模式对象。正则表达式模式定义了匹配规则,例如要匹配数字、字母或特定模式。 3. 匹配字符串:使用re库的函数,例如re.match()或re.search(),在给定的字符串中搜索匹配正则表达式模式的内容。re.match()只检查字符串的开始部分是否匹配,而re.search()会尝试找到整个字符串中的匹配。 4. 获取匹配的结果:通过匹配对象的group()函数,可以获取到匹配到的字符串。 5. 可选操作:除了匹配字符串外,还可以使用re库的其他函数,例如re.findall(),它可以返回所有匹配的子字符串列表;re.sub(),用于替换匹配的内容。 总之,使用Python正则表达式,可以方便地在字符串中进行模式匹配和查找。使用re库提供的函数,可以根据需要进行不同操作,如检查是否匹配、获取匹配的结果以及替换匹配的内容等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老树盘根_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值