Python中的正则表达式和示例
是时候
关注
我们一波了
模块正则表达式(RE)指定与其匹配的一组字符串(模式)。
为了理解RE的类比,MetaCharacter是有用的,重要的,并且将在模块re的功能中使用。
一共有14个元字符,将在功能中进行讨论:
\用来掉落字符的特殊含义
跟随它(在下面讨论)
[]代表角色类别
^匹配开头
匹配结尾
。匹配换行符以外的任何字符
?匹配零个或一个匹配项。
| 表示OR(与任何字符匹配
被它分开。
*任意次数(包括0次)
+一次或多次
{}指示先前RE的出现次数
匹配。
()附上一组RE
函数compile()将
正则表达式编译成模式对象,该对象具有用于各种操作的方法,例如搜索模式匹配或执行字符串替换。
import re
#compile()创建正则表达式字符类[a-e],
#相当于[abcde]。
#类[abcde]将与具有“a”、“b”、“c”、“d”、“e”的字符串匹配。
p = re.compile('[a-e]')
# findall()搜索正则表达式,找到后返回一个列表
print(p.findall("找到了"))
输出:
['e','a','d','b','e','a']
了解输出:
第一次出现是“ Aye”中的“ e”,而不是“ A”,因为它区分大小写。
下一个出现是“ said”中的“ a”,然后是“ said”中的“ d”,然后是“ Gibenson”中的“ b”和“ e”,最后一个“ a”与“ Stark”匹配。
元字符反斜杠“ \”具有非常重要的作用,因为它可以发出各种序列的信号。如果要使用反斜杠而不使用其特殊含义作为元字符,请使用'\\'
\d匹配任何十进制数字,这等效
到设置的类别[0-9]。
\D匹配任何非数字字符。
\s匹配任何空格字符。
\S匹配任何非空白字符
\w匹配任何字母数字字符,这是
等效于类[a-zA-Z0-9_]。
\W匹配任何非字母数字字符。
设置类[\ s ,.]将匹配任何空格字符“,”或“”..
import re
# \d相当于[0-9]。
p = re.compile('\d')
print(p.findall("我在2020年7月9日上午11时去关注软件测试公众号"))
# \d+ 将匹配[0-9]上的组,组大小为一个或更大
p = re.compile('\d+')
print(p.findall("我在2020年7月9日上午11时去关注软件测试公众号"))
输出:
['2', '0', '2', '0', '7', '9', '1', '1']
['2020', '7', '9', '11']
import re
# \w 相当于[a-zA-Z0-9]
p = re.compile('\w')
print(p.findall("Official account: software testing test."))
# \w+ 与字母数字字符组匹配。
p = re.compile('\w+')
print(p.findall("Official account: software testing test."))
# \W 与非字母数字字符匹配。
p = re.compile('\W')
print(p.findall("Official account: software testing test."))
输出:
['O', 'f', 'f', 'i', 'c', 'i', 'a', 'l', 'a', 'c', 'c', 'o', 'u', 'n', 't', 's', 'o', 'f', 't', 'w', 'a', 'r', 'e', 't', 'e', 's', 't', 'i', 'n', 'g', 't', 'e', 's', 't']
['Official', 'account', 'software', 'testing', 'test']
[' ', ':', ' ', ' ', ' ', '.']
import re
# '*' 替换字符的出现次数。
p = re.compile('ab*')
print(p.findall("ababbaabbb"))
输出:
['ab','abb','a','abbb']
了解输出结果:
我们的RE为ab *,后接数字“ a”。'b'的值从0开始。
输出'ab'是有效的,因为单一的'b'伴随着单数'a'。
输出“ abb”有效,因为单数为“ a”和2个为“ b”。
输出“ a”有效,因为单数为“ a”并伴有0“ b”。
输出“ abbb”有效,因为单数为“ a”并伴有3个“ b”。
函数split()
通过出现字符或模式来分割字符串,找到该模式后,字符串中的其余字符将作为结果列表的一部分返回。
语法 :
re.split(pattern, string, maxsplit=0, flags=0)
第一个参数pattern表示正则表达式,string是将在其中搜索pattern并进行拆分的给定字符串,如果未提供maxsplit,则将其视为零“ 0”,如果提供任何非零值,则最多会发生许多分裂。如果maxsplit = 1,则字符串将仅拆分一次,从而产生一个长度为2的列表。这些标志非常有用,可以帮助缩短代码,它们不是必需的参数,例如:flags = re.IGNORECASE,在此拆分中,大小写将被忽略。
from re import split
# '\W+' 非字母数字字符或字符组
# 在找到“,”或空格“”时,split()将从该点拆分字符串
print(split('\W+', 'Software test, Software test, Software test'))
print(split('\W+', "Software test"))
# 这里的“:”、“”、“、”不是字母数字,因此是发生拆分的点
print(split('\W+', 'On 12th Jan 2016, at 11:02 AM'))
# '\d+' 表示数字字符或字符组
# 拆分仅在“12”、“2020”、“11”、“02”发生
print(split('\d+', '2020年1月12日上午11:02'))
输出:
['Software', 'test', 'Software', 'test', 'Software', 'test']
['Software', 'test']
['On', '12th', 'Jan', '2020', 'at', '11', '02', 'AM']
['', '年', '月', '日上午', ':', '\u200b']
函数sub()
语法:
re.sub(pattern,repl,string,count = 0,flags=0)
函数中的“ sub”代表SubString,在给定的字符串(第3个参数)中搜索某个正则表达式模式,并在找到子字符串模式后将其替换为repl(第2个参数),计数检查并保持次数发生这种情况。
import re
# 正则表达式模式“te”匹配“testing”和“test”处的字符串。
#由于忽略了大小写,因此使用标志“te”应与字符串匹配两次
#匹配后,“testing”中的“te”替换为“~*”,在“test”中,替换“te”。
print(re.sub('te', '~*' , 'Coldrain has focused on software testing test', flags = re.IGNORECASE))
# 考虑到大小写敏感度,“test”中的“te”将不会被重新调用。
print(re.sub('te', '~*' , 'Coldrain has focused on software testing test'))
# 当最大值为1时,替换次数为1
print(re.sub('te', '~*' , 'Coldrain has focused on software testing test', count=1, flags = re.IGNORECASE))
输出:
Coldrain has focused on software ~*sting ~*st
Coldrain has focused on software ~*sting ~*st
Coldrain has focused on software ~*sting test
函数subn()
语法:
re.subn(pattern,repl,string,count = 0,flags= 0)
subn()在所有方面都类似于sub(),除了提供输出的方式外。它返回一个元组,其中包含替换和新字符串的总数,而不仅仅是字符串。
import re
print(re.subn('te', '~*' , '雨寒已经关注了软件测试test'))
t = re.subn('te', '~*' , '雨寒已经关注了软件测试test', flags = re.IGNORECASE)
print(t)
print(len(t))
# 这将产生与sub()相同的输出
print(t[0])
输出:
('雨寒已经关注了软件测试~*st', 1)
('雨寒已经关注了软件测试test', 0)
2
雨寒已经关注了软件测试test
函数escape()
语法:
re.escape(字符串)
返回所有非字母数字都加反斜杠的字符串,如果要匹配其中可能包含正则表达式元字符的任意文字字符串,此方法很有用。
import re
escape()返回每个非字母数字字符前带有反斜杠“\”的字符串
仅在第一种情况下“”,不是字母数字
在第二种情况下,“,插入符号“^”、“-”、“[]”、“\”不是字母数字
print(re.escape("I'm still writing at 1 a.m"))
print(re.escape("I Asked what is this [a-9], he said \t ^WoW"))
输出
I'm\ still\ writing\ at\ 1\ a\.m
I\ Asked\ what\ is\ this\ \[a\-9\],\ he\ said\ \ \ \^WoW
本文分享自微信公众号 - 软件测试test(gh_d29759b02f67)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
如何在Selenium WebDriver中处理Web表?
在需要以表格格式显示信息的情况下,通常使用Web表或数据表。本质上,显示的数据可以是静态的也可以是动态的。您经常会在电子商务门户网站中看到这样的示例,其中产品规格显示在Web表中。随着它的广泛使用,您经常会遇到需要在Selenium测试自动化脚本中处理它们的场景。 在本Selenium WebDriver教程中,我将看一下如何在Selenium中处理Web表以及可以在Web表上执行的一些有用操作。在本教程结束时,您将全面了解Selenium测试自动化中的Web表以及用于访问Web表内容的方法。 Selenium中的Web表是什么? Selenium中的Web表格是WebElement,就像其他任何流行的WebElement一样,例如文本框,单选按钮,复选框,下拉菜单等。Web表格及其内容可以通过使用WebElement函数以及定位器来标识元素(行/列)。 表格由行和列组成。为网页创建的表称为网页表。以下是与网络表格相关的一些重要标记: <table>–定义一个HTML表 <th>–在表中包含标题信息 <tr>–定义表中的一行 <td>–定...
- 下一篇
股票数据计算分析 web 系统 stock-job-web v1.0 发布了
stock-job-web V1 是基于Python的pandas,tushare,bokeh,tornado,stockstats,ta-lib等框架开发的全栈股票系统。 1)可以直接使用docker直接本地部署运行,整个项目在docker hub上压缩后200BM,本地占用500MB磁盘空间。 2)使用Docker解决了Python库安装问题,使用Mariadb(MySQL)存储数据。借助tushare抓取数据(老API,后续使用tushare pro开发) 3)使用corn做定时任务,每天进行数据抓取计算,每天18点开始进行数据计算,计算当日数据,使用300天数据进行计算,大约需要15分钟计算完毕。 4)股票数据接口防止被封,按天进行数据缓存,储存最近3天数据,每天定时清除,同时使用read_pickle to_pickle 的gzip压缩模式存储。 5)使用tornado开发web系统,支持股票数据,沪深300成份股,中证500成份股,龙虎榜数据,每日股票数据,每日大盘指数行情等 6)数据展示系统,是通用数据展示系统,配置字典模板之后,页面自动加载数据,并完成数据展示,后续自己...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS8安装Docker,最新的服务器搭配容器使用
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Linux系统CentOS6、CentOS7手动修改IP地址
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- MySQL8.0.19开启GTID主从同步CentOS8