前言
我们在做接口自动化的时候,处理接口依赖的相关数据时,通常会使用正则表达式来进行提取相关的数据。
? 正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(Regular Expression,在代码中常简写为regex、regexp或RE) 。它是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。而Python 自1.5版本起增加了re模块,它提供 Perl 风格的正则表达式模式。
一、正则表达式语法
1.1表示单字符
? 单字符:即表示一个单独的字符,比如匹配数字用\d,匹配非数字用\D。
? 除以下语法,也可以匹配指定的具体字符,可以是1个也可以是多个。
字符 | 功能说明 |
. | 匹配任意1个字符(除了\n) |
<2a> | 匹配<>中括号中列举的字符,如这里就是匹配2或者a这两个字符其中的一个 |
\d | 匹配数字,即0-9 |
\D | 匹配非数字 |
\s | 匹配空白,即空格、tab键(tab键为两个空格) |
\S | 匹配非空白 |
\w | 匹配单词字符,即a-z、A-Z、0-9、_(数字、字母、下划线) |
\W | 匹配非单词字符 |
? 实例如下,这里先说明一下findall(匹配规则,要匹配的字符串)这个 *** 是查找所有匹配的数据,以列表的形式返回,后面会在re模块进行详解:
import re# .:匹配任意1个字符re1 = r'.'res1 = re.findall(re1, '\nj8?0\nbth\nihb')print(res1) # 运行结果:<'j', '8', '?', '0', 'b', 't', 'h', 'i', 'h', 'b'># <>:匹配列举中的其中一个re2 = r""res2 = re.findall(re2, '1iugfiSHOIFUOFGIDHFGFD2345a6a78b99cc')print(res2) # 运行结果:<'a', 'a', 'b', 'c', 'c'># \d:匹配一个数字re3 = r"\d"res3 = re.findall(re3, "dfghjkl32212dfghjk")print(res3) # 运行结果:<'3', '2', '2', '1', '2'># \D:匹配一个非数字re4 = r"\D"res4 = re.findall(re4, "d212dk?\n$%3;>a")print(res4) # 运行结果:<'d', 'd', 'k', '?', '\n', '$', '%', ';', '>', 'a'># \s:匹配一个空白键或tab键(tab键实际就是两个空白键)re5 = r"\s"res5 = re.findall(re5,"a s d a 9999")print(res5) # 运行结果:<' ', ' ', ' ', ' ', ' '># \S: 匹配非空白键re6 = r"\S"res6 = re.findall(re6, "a s d a 9999")print(res6) # 运行结果:<'a', 's', 'd', 'a', '9', '9', '9', '9'># \w:匹配一个单词字符(数字、字母、下划线)re7 = r"\w"res7 = re.findall(re7, "ce12sd@#a as_#$")print(res7) # 运行结果:<'c', 'e', '1', '2', 's', 'd', 'a', 'a', 's', '_'># \W:匹配一个非单词字符(不是数字、字母、下划线)re8 = r"\W"res8 = re.findall(re8, "ce12sd@#a as_#$")print(res8) # 运行结果:<'@', '#', ' ', '#', '$'># 匹配指定字符re9 = r"python"res9 = re.findall(re9, "cepy1thon12spython123@@python")print(res9) # 运行结果:<'python', 'python'>
1.2表示数量
? 如果要匹配某个字符多次,就可以在字符后面加上数量进行表示,具体规则如下:
字符 | 功能说明 |
* | 匹配前一个字符出现0次或者无限次,即可有可无 |
+ | 匹配前一个字符出现1次或无限次,即至少1次 |
? | 匹配前一个字符出现0次或1次,即要么没有,要么只有1次 |
{m} | 匹配前一个字符出现m次 |
{m,} | 匹配前一个字符至少出现m次 |
{m,n} | 匹配前一个字符出现从m到n次 |
? 实例如下:
import re# *:表示前一个字符出现0次以上(包括0次)re21 = r"\d*" # 这里匹配的规则,前一个字符是数字res21 = re.findall(re21, "343aa1112df345g1h6699") # 如匹配到a时,属于符合0次,但因为没有值所以会为空print(res21) # 运行结果:<'343', '', '', '1112', '', '', '345', '', '1', '', '6699', ''># ? : 表示0次或者一次re22 = r"\d?"res22 = re.findall(re22, "3@43*a111")print(res22) # 运行结果:<'3', '', '4', '3', '', '', '1', '1', '1', ''># {m}:表示匹配一个字符m次re23 = r"1<3456789>\d{9}" # 手机号:第1位为1,第2位匹配列举的其中1个数字,第3位开始是数字,且匹配9次res23 = re.findall(re23,"sas13566778899fgstrong56912345678jkghj12788990000aaa113588889999")print(res23) # 运行结果:<'13566778899', '13588889999'># {m,}:表示匹配一个字符至少m次re24 = r"\d{7,}"res24 = re.findall(re24, "sas12356fgh1234567jkghj12788990000aaa113588889999")print(res24) # 运行结果:<'1234567', '12788990000', '113588889999'># {m,n}:表示匹配一个字符出现m次到n次re25 = r"\d{3,5}"res25 = re.findall(re25, "aaaaa123456ghj333yyy77iii88jj909768876")print(res25) # 运行结果:<'12345', '333', '90976', '8876'>
1.2.1匹配分组
字符 | 功能说明 |
| | 匹配左右任意一个表达式 |
(ab) | 将括号中字符作为一个分组 |
? 实例如下:
import re# 同时定义多个规则,只要满足其中一个re31 = r"13566778899|13534563456|14788990000"res31 = re.findall(re31, "sas13566778899fgh13534563456jkghj14788990000")print(res31) # 运行结果:<'13566778899', '13534563456', '14788990000'># ():匹配分组:在匹配规则的数据中提取括号里的数据re32 = r"aa(\d{3})bb" # 如何数据符合规则,结果只会取括号中的数据,即\d{3}res32 = re.findall(re32, "ggghjkaa123bbhhaa672bbjhjjaa@45bb")print(res32) # 运行结果:<'123', '672'>
1.3 表示边界
字符 | 功能说明 |
^ | 匹配字符串开头,只能匹配开头 |
$ | 匹配字符串结尾,只能匹配结尾 |
\b | 匹配一个单词的边界(单词:字母、数字、下划线) |
\B | 匹配非单词的边界 |
? 实例如下:
import re# ^:匹配字符串的开头re41 = r"^python" # 字符串开头为pythonres41 = re.findall(re41, "python999python") # 只会匹配这个字符串的开头res411 = re.findall(re41, "1python999python") # 因为开头是1,第1位就不符合了print(res41) # 运行结果:<'python'>print(res411) # 运行结果:<># $:匹配字符串的结尾re42=r"python$" # 字符串以python结尾res42 = re.findall(re42, "python999python")print(res42) # 运行结果:<'python'># \b:匹配单词的边界,单词即:字母、数字、下划线re43 = r"\bpython" # 即匹配python,且python的前一位是不是单词res43 = re.findall(re43, "1python 999 python") # 这里第1个python的前1位是单词,因此第1个是不符合的print(res43) # 运行结果:<'python'># \B:匹配非单词的边界re44 = r"\Bpython" # 即匹配python,且python的前一位是单词res44 = re.findall(re44, "1python999python")print(res44) # 运行结果:<'python', 'python'>
二、贪婪模式
? python里数量词默认是贪婪的,总是尝试匹配尽可能多的字符,而非贪婪模式则是尝试匹配尽可能少的字符,在表示数量的表达式后加上问号(?)就可以关闭贪婪模式。
? 如下例子,匹配2个以上的数字,如果符合条件它会一直匹配到不符合才停止,如其中的34656fya,34656符合2个数字以上,那么它会一直匹配到6为止,如果关闭贪婪模式,那么在满足2个数字时就会停止,最后可以匹配到34、65。
import re# 默认的贪婪模式下test = 'aa123aaaa34656fyaa12a123d'res = re.findall(r'\d{2,}', test)print(res) # 运行结果:<'123', '34656', '12', '123'># 关闭贪婪模式res2 = re.findall(r'\d{2,}?', test)print(res2) # 运行结果:<'12', '34', '65', '12', '12'>
三、re模块
? 在python中使用正则表达式,就会用到re模块来进行操作,提供的 *** 一般需要传入两个参数:
- 参数1: 匹配的规则
- 参数2:要进行匹配的字符串
3.1 re.findall()
? 查找所有符合规范的字符串,以列表的形式返回。
import retest = 'aa123aaaa34656fyaa12a123d'res = re.findall(r'\d{2,}', test)print(res) # 运行结果:<'123', '34656', '12', '123'>
3.2re.search()
? 查找之一个符合规范的字符串,返回的是一个匹配对象,可以通过group()将匹配到的数据直接提取出来。
import res = "123abc123aaa123bbb888ccc"res2 = re.search(r'123', s)print(res2) # 运行结果:<re.Match object; span=(0, 3), match='123'># 通过group将匹配到的数据提取出来,返回类型为strprint(res2.group()) # 运行结果:123
? 返回的匹配对象中,span为匹配到的数据的下标范围,match则是匹配到的值。
? group()参数说明:
- 不传参数:获取的是匹配到的所有内容
- 传入数值:可以通过参数来指定,获取第几个分组中的内容(获取第1个分组,传入参数1,获取第2个分组,传入参数2,依次类推。)
import res = "123abc123aaa123bbb888ccc"re4 = r"aaa(\d{3})bbb(\d{3})ccc" # 这里分组就是前面说到的匹配语法:()res4 = re.search(re4, s)print(res4)# group不传参数:获取的是匹配到的所有内容# group通过参数指定,获取第几个分组中的内容(获取第1个分组,传入参数1,获取第2个分组,传入参数2,依次类推..print(res4.group())print(res4.group(1))print(res4.group(2))
3.3 re.match()
? 从字符串的起始位置进行匹配,匹配成功则返回匹配到的对象,如果开头的位置不符合匹配的规则,不会继续往后面去匹配,直接返回None。re.match()与re.search()都是只匹配一个,不一样的是,前者只匹配字符串的开头,后者则是会匹配整个字符串,但只获取之一个符合的数据。
import res = "a123abc123aaa1234bbb888ccc"# match:只匹配字符串的开头,开头不符合就返回Noneres1 = re.match(r"a123", s)res2 = re.match(r"a1234", s)print(res1) # 运行结果:<re.Match object; span=(0, 4), match='a123'>print(res2) # 运行结果:None
3.4re.sub()
? 检索和替换:用于替换字符串中的匹配项
? re.sub()参数说明:
- 参数1:待替换的字符串
- 参数2:目标字符串
- 参数3:要进行替换操作的字符串
- 参数4:可以指定最多替换的次数,非必填(默认替换所有符合规范的字符串)
import res = "a123abc123aaa123bbb888ccc"# <font color="#FF0000">参数1:</font>待替换的字符串# <font color="#FF0000">参数2:</font>目标字符串# <font color="#FF0000">参数3:</font>要进行替换操作的字符串# <font color="#FF0000">参数4:</font>可以指定最多替换的次数,非必填(默认替换所有符合规范的字符串)res5 = re.sub(r'123', "666", s, 4)print(res5) # 运行结果:a666abc666aaa666bbb888ccc
四、用例参数化
? 在接口自动化测试中,我们的测试数据都是保存在excel中的,有些参数如果写死一个数据,可能换个场景或者换个环境就不能用了,那么切换环境时就需要先把新环境的测试数据准备好,并且能支持去跑我们的脚本,或者把excel的数据修改为适合新环境的测试数据,维护的成本较高。因此就需要把我们的自动化脚本测试数据尽量地参数化,降低维护成本。
? 我们先看简单版的参数化,以登录为例,登录时用到的账号、密码等信息都可以提取出来放到配置文件,修改数据或更换环境时直接在配置文件中统一修改就可以了。
? 但如果有多个不同的数据需要参数化呢,每个参数都加个判断去替换数据吗?这样的代码既啰嗦又不好维护,这时re模块就可以用上了,直接看一个实例:
import refrom common.myconfig import confclass TestData: """用于临时保存一些要替换的数据""" passdef replace_data(data): r = r"#(.+?)#" # 注意这个分组()内的内容 # 判断是否有需要替换的数据 while re.search(r, data): res = re.search(r, data) # 匹配出之一个要替换的数据 item = res.group() # 提取要替换的数据内容 key = res.group(1) # 获取要替换内容中的数据项 try: # 根据替换内容中的数据项去配置文件中找到对应的内容,进行替换 data = data.replace(item, conf.get_str("test_data", key)) except: # 如果在配置文件中找不到就在临时保存的数据中找,然后替换 data = data.replace(item, getattr(TestData, key)) return data
? 注意这里的正则表达式是有使用?关闭贪婪模式的,因为测试数据中可能会需要参数化2个或以上的数据,如果不关闭贪婪模式,它就只能匹配搭配一个数据,举例如下:
import redata = '{"mobile_phone":"#phone#","pwd":"#pwd#","user":#user#}'r1 = "#(.+)#"res1 = re.findall(r1, data)print(res1) # 运行结果:<'phone#","pwd":"#pwd#","user":#user'> 注意这里单引号只有一个数据print(len(res1)) # 运行结果:1r2 = "#(.+?)#"res2 = re.findall(r2, data)print(res2) # 运行结果:<'phone', 'pwd', 'user'>print(len(res2)) # 运行结果:3
? 另外提到的一个用于临时保存数据的类,这里主要用于保存接口返回的数据,因为有些测试数据是动态变化的,可能要依赖于某个接口,后面的测试用例又需要这些数据,那么我们在接口返回时就可以保存到这个类里作为一个类属性,接着在需要用这个数据的测试用例时,把这个类属性提取出来替换到测试数据中即可。提示:设置属性setattr(对象, 属性名, 属性值),获取属性值getattr(对象, 属性名)。
总结
今天的文章就到这里了哟喜欢的小伙伴记得点赞收藏评论加关注哟。
声明:本文为广告信息,所有内容和图片由广告内容提供方提供,涉及版权、产品服务和质量等所有信息和一切法律责任由广告内容提供方负责。
每周一期,纵览音视频技术领域的干货。
新闻投稿:contribute@livevideostack.com。
WebRTC实现P2P文件传输
本文的内容是利用WebRTC中的RTCPeerConnection的能力实现P2P通信。
https://juejin.cn/post/6919677278448271374
WebRTC 2021 流行趋势大赏
2021年将是“还债”的一年,此前所进行的系统设计、软件架构或软件开发都将迎来最终结果;同时它也将是服务及传输质量不断优化的一年。本篇文章将介绍 WebRTC 的发展趋势,以及如何据此不断跟进通信技术的发展速度。
https://mp.weixin.qq.com/s/GGorNudXw7vSsgO-DVwSLw
WebRTC的现状和未来:专访W3C WebRTC Chair Bernard Aboba(下)
每年,我都会在IIT-RTC会议上与许多WebRTC标准人员进行交流,这场疫情显然让今年有所不同。虽然我们在今年的Kranky Geek会议上确实谈到了标准化和“WebRTC的未来”,但我们没有时间深入研究更多细节,所以我们将在这里讨论。
https://mp.weixin.qq.com/s/PaiEOrY7-q0uaqopPkhhUA
阿里云 RTC QoS 屏幕共享弱网优化之若干编码器相关优化
屏幕共享是视频会议中使用频率更高的功能之一,但在实际场景中用户所处 *** 环境复杂,常遇到丢包或者拥塞的情况,所以如何优化弱网环境下的用户体验也成为了音视频通信中重要的一环。本文主要分享阿里云 RTC QoS 如何通过若干编码器相关优化提升弱网环境下的屏幕共享体验。
https://mp.weixin.qq.com/s/VV4cmcEQRQnD5 *** kICEknQ
媒体传输的可靠性
本文对技术有些过度简化,仅介绍了一些核心概念。它只为该专业领域以外的人员提供了一些特定概念的简介,而绝对不是关于该概念的完整,透彻和有组织的介绍。
http://webrtcbydralex.com/index.php/2021/01/19/reliability-in-media-transports/
低延迟DASH流
本文来自Seattle Video Tech November 2020,主讲者是Brightcove Video Research小组的视频系统工程师Bo Zhang,进行演讲。这次将介绍的是使用开放源代码工具的低延迟DASH流。
https://mp.weixin.qq.com/s/HsGrk6kdvhCGVanyZ6E1uw
新编码标准的部署计划
本视频来自Jan Ozer在streaming learning center的课程,介绍了多种新的编码标准的部署计划。
https://mp.weixin.qq.com/s/Rz7OKBB8yewOEtE_OWj_3g
IntelliJ IDEA 20 周岁
IntelliJ IDEA 的首个版本最初于 2001 年 1 月推出,如今 IntelliJ IDEA 达到了一个新的里程碑式的成就——诞生 20 周年!
https://mp.weixin.qq.com/s/DUmzHEydlfraadFfr6dRpg
NeurIPS 2020 | 基于细粒度动态 *** 的图像物体检测器
今天,我们介绍的是旷视研究院入选NeurIPS 2020的工作之一。近年来动态 *** 被广泛地探索并应用在图像分类任务中。动态 *** 可以在推断阶段,根据输入自适应地改变 *** 的连接方式。使得 *** 可以在相似的计算复杂度下获得更多的模型容量,从而实现高效率和高特征表达的并存。
https://mp.weixin.qq.com/s/ojt3B1tVeBavOJTxE8gDIQ
媒体及5G的机遇与挑战
本文来自SUMMIT 2020的演讲,演讲者是5G-MAG技术负责人Jordi J. Gimenez,演讲的主题是媒体及5G的机遇与挑战。
https://mp.weixin.qq.com/s/k5CFlhZLgL7UBmIr3ZeQrg
超高清视频:2021年春晚试播CUVA HDR+AVS3+8K内容
超高清视频是视音频领域数字化、高清化之后的新一轮重大技术革新。我国超高清视频产业发展迅速,已形成硬件产品不断突破、内容资源逐步丰富、标准体系初步建立、行业应用加快落地的良好态势。未来,应致力于打造产业高地、加快构建生态体系、加快融合发展、扩大开放合作,继续推进超高清视频产业高质量发展。
https://mp.weixin.qq.com/s/p6NMudIeAfD8Szk9LqyTeA
体育直播软件发展的三个阶段
转播体育赛事利用了竞技中电光火石的兴奋感,试图为球迷在家中通过流媒体复制球场体验,这是个有利可图的机会。
https://mp.weixin.qq.com/s/bDSyTpJRRe6UmO99UBI1hA
日本「AI 鱼脸识别」项目,每分钟识别 100 条,有望让渔民不再“摸鱼”
近日,日本的一个 AI 分拣鱼类项目进入实验阶段。这将有望改善日本渔业劳动力老龄化及短缺的社会现状。
https://mp.weixin.qq.com/s/hYaVseOiX8MmaOB4M6ctJA
火山引擎在机器写作和机器翻译方面的最新进展
人工智能正在改变人们创造、获取、分享及消费信息的模式,然而高效高质有用的内容创作仍然困难重重,保证大众能公正的获取到准确信息也充满挑战。本文,InfoQ 经授权整理了字节跳动 AI Lab 总监李磊近期在火山引擎智能增长技术专场的演讲(火山引擎是字节跳动旗下的数字服务与智能科技及品牌),其分享了文本生成技术进展、挑战及火山引擎的实践经验。
https://mp.weixin.qq.com/s/qn9gjNMTYZZJFGyH39FHlQ
AI - 让延时摄影变得如此简单
单张静态图片也能变身为延时摄影。
https://mp.weixin.qq.com/s/yh8sxENbEfLmx9G3DPDhfQ
记忆中的像素块褪色了吗?用开源的体素编辑器重新做个 3D 的吧!
本文适合对图形表现有兴趣的美术或者开发人员。
https://juejin.cn/post/6919645268665171975
炉石卡组推荐:狂野控制撕牌宇宙术/狂野进化萨/宇宙法/防战撕!给我可劲儿撕!
大家好,我是生而狂野|神子龙,欢迎来到今天的卡组搬运站,2套狂野,2套标准。(笔者声明:卡组非本人原创,祝大家开心)。
●卡祖目录
狂野控制撕牌宇宙术
狂野进化萨
标准宇宙法
标准暗月防战
●狂野控制撕牌宇宙术
AAEBBv0GyfUC+pQDo8MDrfkD4vkDHtfOA97EAoQXnakDrs0Cp7UD/KMDj8cC58sC66wDw+oC08UChRe6BJLeA9i7A *** eA/UP+g6ggAO9mQPuvwPO4QPDFqDOApz4AtsGxLkD6OcCl9MCAAA=
从目前狂野天梯主流环境总体上来说,后期厚度卡组很少,平均对局时长很短,以往带恩佐斯+死亡领主+卡塔图防御者的亡语体系,已经不太适合现在的环境了,尤其目前大哥牧比较多,遇到后下死亡领主无异于自寻死路。
这样我们便可以节省出卡位来更好地应对快攻,解决宇宙术容易“猝死”的尴尬局面;这里也放弃了空灵召唤者与高阶女巫维洛,主要是担心拉出“提克特斯”,其次在我们没有携带感知恶魔的前提下,空灵召唤者能稳定拉出大恶魔的概率较小;因为我们主打防守与控制,所以“二王:玛尔加尼斯”的意义也不是很大了,故而没有携带。
“芬利·莫格顿爵士+灰发巫师”可以有效针对宇宙牧、奇数战;“工匠大师欧沃斯巴克”是为了针对我们的劣势对局大哥牧;“吐火艺人”可以在不触发永不屈服与古神在上的情况下,清掉奇数骑的报告兵;“布莱恩·铜须+提克特斯”面对慢速卡组大概率可以一锤定音;“咖啡师林彻与蛇发女妖佐拉是我们打资源的关键”;一张“游荡恶鬼”预防我们没有撕掉“青玉护符”,有时遇到黑眼术“力量的代价”等1费法术也有不错的发挥。
●狂野进化萨
AAEBCqoI97kC9Z8Dm7UDmcMDgdoD4PkD0PoD0foD0voDBpzOA+iwA/oOkwn2vQLGmQMM2KkD7gaq3gPbuAP5vwL6qgKyBqneA924A6beA6C2AvDUAwA=
起手留牌:雷霆绽放、异变、异变轮转、沙漠野兔,遇到快攻要留大漩涡传送门,碰到德鲁伊必留衰变,巨化快攻德还是挺多的;卡组总体上操作很简单,通过随从进化来创造出大场面(运气再差,无非也就是一地1/1,此时建议你赶紧去买卡包,双金黄蛋不在话下),加强自己的随从交换能力,而且还有可能嗜血一波带走对面;笼斗管理员可以定向过到“沼泽拳刺”,因为“沼泽拳刺”的原因,“恐怖海盗”可以0费出,如果需要嘲讽护脸,则不要贪进化了;藏宝匪贼可以让我们多一把进化刀;这里注意一点即可,优势时不要摇图腾进化,小心进化出“末日预言者”。
●标准宇宙法
AAECCf0EjRbNsQKlwwO06gOe4QPM+gPO+gPP+gMe8K8DoaEDwqEDv6QDip4DjQirBKCbA5+bA9nRA5PhA5XhA+G2A4OWA8O4A/yjA427A/KlA5GxA/SrA+jhA+DMA+veA8kD7QTexAOMtgPCuAOSpAP6rAMAAA==
标准法师总体上感觉还是不太行,起手留牌:了不起的杰弗里斯、远古谜团、愚人套牌、低调的游客,遇到盗贼要留“衰变飞弹”,防一手“艾德温·范克里夫”;遇到快攻可留霜冻射线、被禁锢的眼魔;“低调的游客+套圈圈+暗月先知赛格”的奥秘体系,让宇宙法的过牌更加舒服了,而且还能起到干扰对手的作用;环境中“奥达奇战刃、切髓之刃、沼泽拳刺、瑞林的步枪、海盗之锚、埃辛诺斯壁垒”等武器较多,我们可以额外带上“酸性沼泽软泥怪”。“乘龙法师+深度冻结”面对恶魔猎手时非常好用,预祝你可以有机会打出来。
●标准希拉斯·暗月防战
AAECBweMFpfDA6PLA5vhA+PjA+P5Awi23gOT0APjvgPI4QOr1APfrQPerQP5wgMLp *** D2a0D3KkDS9QEtd4D99QD/weQA7i5A6IEAA==
标准战士真的是恶魔猎手的克星,二者有种“既生瑜,何生亮”的悲叹!希拉斯·暗月防战虽然在创造伤害上不如“精英牛头人酋长,金属之神”,也就是我们常说的“ETC防战”,不过因为我们最终的斩杀手段是“希拉斯·暗月+魂缚灰舌+盾牌猛击”,所以我们必须要有足够的护甲,这就需要“冒进的艇长+铸甲师+血誓雇佣兵”等来完成;起手留牌:海盗之锚、雷区挑战、铸甲师、巴罗夫领主、怪盗军需官;我们所有的苟活手段主要是为了耗尽对手的资源,同时拥有OTK终结对局的能力。
附录:我的撕牌截图
数不清的埃及星星汇成了萨拉赫,昨日的安菲尔德重温了旧梦。
从雅典到基辅,利物浦还有最后的90分钟要走。
阿森纳Saudj99
I envy liverpool for salah.
羡慕利物浦有萨拉赫
不莱梅ebeka
you have welbz tho
你们不有维尔贝克吗
米堡DrHerpenderp
The English Salah
那个英伦萨拉赫
利物浦In_Panopticon
nah salah is just the egyptian welbeck
萨拉赫只不过是埃及维尔贝克罢了
此处有人不服,接着利物浦球迷_temp_variable上传了一份足以载入史册的视频,维尔贝克超现实主义地奉献了四粒助攻。众皆叹服。
乱入结束。大家继续吹萨拉赫。
阿贾克斯halfzes:阿扬-内切兜射-罗本向您致意!Robben sends his regard
利物浦kukaz00
Honestly the Klopp system is enabling him a lot and he's having shitloads of confidence AND OH MY GOD HE SCORED AGAIN
讲真克洛普的体系赋予了他很多,他前所未有的自信。哦天呐他又进球了。
利物浦Agent4nderson
Does the system enable him, or does he enable the system?
到底是体系成就了萨拉赫,还是萨拉赫成就了利物浦呢?
曼联wrdb2007
What a finish
Holy shit what a year he's having
无与伦比的终结,这是怎样精彩的一年啊
网友IsProbablyLying4
Le cut inside man version 2
内切先生2.0
两次进球拒不庆祝,萨拉赫的球技球品赢得交口称赞
网友Psychaz
out of respect to his former club
出于尊重,萨拉赫选择了不庆祝
网友TheShearerComplex
That self constraint though! He must have been exploding on the inside with *** .
这是他的自制!此刻萨拉赫的内心定被肾上腺素搅得翻江倒海。
法兰克福afito
Does the mailman celebrate when he delivers?-Mo Salah
你见过哪位邮差送完信后庆祝的?-萨拉赫
切尔西invalid_name_
He didn’t celebrate against Chelsea either, even if he only spent a short time there he showed them respect. He’s and incredibly likeable guy
对切尔西进球他也没有庆祝,尽管萨拉赫只停留了很短时间但仍旧展现了尊重。他真是个惹人喜爱的人。
曼联geomilod
Ballon d’or?
金球奖?
切尔西vj_34
definitely if Liverpool take the CL and Salah does well in the WC
如果利物浦能夺得欧冠,如果萨拉赫能在世界杯发挥出色,他肯定能拿到金球奖
巴萨Bousine
At this rate, Salah will get the Ballon d'Or before Neymar.
这样发展下去,萨拉赫能在内马尔之前收获金球奖
1-5,巴萨usamafaisal98:leileleile,好戏开场(So it begins..
切尔西xyzTr1LL
Liverpool fans start clenching
利记球迷的脚指头又要扣紧了
利物浦ObvThrowAway111
NEVER. UNCLENCH..... NOOB
一看你就不懂,就没松开过!
网友re6en:泡了杯咖啡就5-2了??(I go make a coffee from a 5-
曼联wrdb2007
Roma and dat three goal gap
Surely not..??
罗马、三球落后...
肯定不是我想的那样...
阿森纳Heblas:托蒂早已看穿一切!(BAH GAWD THAT'S TOTTI'S MUSIC!
利物浦The_Adict
Liverpool up 3.
Roma down 3.
Oh Lord.
利物浦领先三球..
罗马落后三球..
妈妈呀
巴萨kunalc
This was planned all along
全是套路
阿森纳arroganthumility1
OMG, even better than being 4-1 down vs Barca...
妈的,现在罗马的局势比1-4输给巴萨还好啊(2个客场进球)...
马赛Perpete
Di Francesco: "Guys, tonight, our main goal is to do better than at Barcelona." Roma players: "OK coach, will do !"
罗马主帅:兄弟们,今晚的目标是踢得比诺坎普之夜更好!
全队:收到!保证完成任务!
巴萨usamafaisal98
Liverpool with their best Barca impersonation
这是利物浦踢得最巴萨的比赛
巴萨CoMmUnIsTdOmO
3-0 at Roma incoming...
罗马主场3-0要来咯...
巴萨gimlixtreme
who the *** would lose 3-0 to roma?
谁他妈会输给罗马0-3??
加拉塔萨雷well_do_ya_punk
Everything is going according to plan.
一切按计划进行
里昂dalyon
congrats roma on the final
恭喜罗马杀入决赛
巴萨球迷自黑也是有够狠的。最后奉上BR的精彩ps,今晚拜仁vs皇马,我们明天再见!