正则表达式范围匹配

前言html

近期小编在进行评测语料的制做时,涉及到一些复杂字符串的过滤和提取等内容,例如找出某一句话中在某个特定语句结构下出现的文字,虽然使用循环,if-else等语句能够搞定,可是比较麻烦,使用正则表达式处理就比较方便。python

No.1web

正则表达式定义正则表达式

正则表达式,又称正规表达式(英文:Regular Expression,RE),它使用单个字符串来描述,匹配一系列符合某个句法规则的字符串,在不少的文本编辑器里,正则表达式一般被用来检索和替换那些匹配某个模式的文本。微信


No.2架构

正则表达式使用并发

举个栗子,假设使用爬虫得到一个HTML源码,其中一段为:app

str1=r"<html><body><h1>hello.world<h1></body></html><h1>hello:world<h1><h1>helloAworld<h1>"

这时候若是想提取全部的hello(x)world,一般须要对字符串进行split操做等,可是当第二个<h1>变为</h1>, 问题就会变得复杂起来。而用以下正则表达式则能够直接将hello(x)word提取出来:编辑器

import rep1 = r"hello.world"pattern =re.compile(p1)print(re.findall(pattern, str1))

其中,p1为正则表达式字符串,hello与world之间.”为一个能够匹配任何字符的元字符(后面有介绍),pattern为通过编译后获得的正则表达式对象,这样作的目的是便于后面的匹配中能够复用,上述表达式获得结果为:分布式


No.3

正则表达式匹配方法

除了上面介绍的findall方法以外,正则表达式经常使用的匹配方法还有 match和search,三者之间的区别为:

match:从字符串的起始位置匹配正则表达式,若是匹配,就返回匹配成功的结果;若是不匹配,就返回None;

search: 它在匹配时会扫描整个字符串,而后返回第一个成功匹配的结果,若是搜索完了还没找到,则返回None;

findall: 该方法会搜索整个字符串,而后返回一个list,匹配正则表达式的全部内容。


No.4

正则表达式范围匹配

在一段字符串内,咱们能够在一段范围内选择要或者不要某些字符,例若有以下字符串:

str2 = r"lap &ap nap rap xap xap pap"

对于str2,咱们想要除了&ap以外的全部正常的字符串,经过以下表达式便可完成:

p2 = r"[lnrxp]ap" #字母开头ap都要pattern = re.compile(p)print (re.findall(pattern,str2))

上述代码获得的结果为:

上述正则表达式中,对于str2中存在类别较少的(x)ap,当有26个字母而且区分大小写时使用该语句显然不现实,Python内置了不少简洁的正则表达式,避免咱们在提取的过程当中须要把想要的字母一个个写出来,常见的有:

  • [0-9]0123456789任意之一

  • [a-z]小写字母任意之一

  • [A-Z]大写字母任意之一

  • \d    等同于[0-9]

  • \D    等同于[^0-9]即匹配非数字

  • \w    等同于[a-z0-9A-Z]匹配大小写字母,数字和下划线

  • \W    等同于上一条取非

所以对于上述正则表达式p2,使用r"\wap",r“[a-z]ap”获得的结果是同样的。此外咱们在前面已经介绍过“.”元字符,在p2中,“[]”也是一个元字符,它表示的是当前表达式匹配[]内任意的字符。Python中还内置了不少元字符,方便了咱们在写正则表达式时可以更简洁的表述。读者能够访问一下网址来查看定义:https://www.runoob.com/regexp/regexp-metachar.html。


No.5

正则表达之贪心与懒惰

假设有以下字符串:

str3 = r"sogoutest@sogou-inc.com.cn"

咱们想要把str3中从@开始一直到“.”以前的内容匹配出来,则能够这样去实现

p3 = r"@.+\."pattern= re.compile(p3)print (re.findall(pattern,str3))

其中,“+”也是也是一个元字符,表示匹配前面的最近的字符一次或屡次,能够看到,此时表达式尽量多地进行匹配,匹配到了com后面的“.”,即贪心模式。若只想匹配到第一个点结束,便可使用以下语句改成懒惰模式。

p3 = r"@.+?\."pattern= re.compile(p3)print (re.findall(pattern,str3))

此时咱们能够看到,结果在匹配到inc后面的“.”就结束了。

参考连接:

1.https://www.py.cn/spider/guide/14488.html

2.https://www.py.cn/faq/python/12021.html

3.https://www.runoob.com/regexp/regexp-metachar.html

结语

2020/03/17

正则表达式在处理字符串时做用很大,结合Python提供的元字符列表能够实现功能更多更复杂的语句,针对同一个问题的解决方式可能会有不少种,须要在平时使用中加以运用熟练掌握。



正则表达式往期推文:
一块儿来了解一下正则表达式



文章合集

Selenium | Appium  | Jenkins  |  Jmeter 

软件测试方法汇总 Postman接口参数化 | 测试用例设计

视频教程

Selenium | Appium | Jenkins | Jmeter

往期性能推文:

01|性能综述: 性能测试的概念究竟是什么?(深度好文)

02|性能综述: TPS和响应时间之间是什么关系?

03|性能综述: 怎么理解TPS、QPS、RT、吞吐量这些性能指标?

04|JMeter和LoadRunner:要知道工具仅仅只是工具

05|指标关系:你知道并发用户数应该怎么算吗?
性能测试工具--Locust官方文档(API)解读(全)

AWS与Docker

如何使用AWS EC2+Docker+JMeter构建分布式负载测试基础架构
Docker容器数据持久化和容器网桥链接
Docker删除image和container
Docker与VM虚拟机的区别以及Docker的特色



END



以为不错,能够点“在看”,或者转发留言


精彩的内容要和朋友分享

本文分享自微信公众号 - 软测小生(ruancexiaosheng)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索