正则表达式|学习笔记

简介: 快速学习正则表达式

开发者学堂课程【高校精品课-华东师范大学 - Python 数据科学基础与实践正则表达式】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/1067/detail/15400


正则表达式

 

正则表达式是处理字符串非常强大的一个工具。

它有自己特定的语法结构,然后实现字符串的检索替换,匹配验证。把格式网页专栏之后,再用正则表达式提取里面的信息非常方便的。首先看一下什么是正则表达式,政策表达式就是对字符串操作的一种逻辑公式,用事先定义好的一些特定字符,及这些特定字符的组合,组成这么一个“规则字符串”,这个“规则字符串”表达了一种过滤逻辑。那么用它可以匹配目标字符串。

它不是 Pathon 独有的一个模块,但是 Pathon 里面的 re 库提供了正则表达式的实现。可以直接用 re 库函数实现字符串的提取,匹配验证等等操作。那么接下来展示几个样例什么是正则表达式,什么时候要用到正则表达式,在这里打开一个 oschina.net 正则表达式的一个这么一个网址,在线表达式测试,在这里就写了一些字符串 有网址,QQ号,邮箱,邮编以及电话号码,在下面就可以写一些正则表达式,然后这个测试匹配就可以测试了,在右边这些都是一些常用的正则表达式,在框里面输入一些正则表达式,然后匹配上面的字符串。

然后匹配一个电话号码,你看到在这里出现了一个电话号码的一个正则表达式,那么接下来会搜索上面的字符串找到匹配正则表达式,然后显示,然后看一下匹配显示中文字符,再看一下匹配中国邮政编码,这些都是一些常规的正则表达式一些固定写法,然后就会搜索上面的字符串,把里面符合正则表达式的邮政编码,然后把它显示到下面。这个就是正则表达式的一些基本样例。

接下来再看一个网页,这个是今日头条的一个网页,这张网页是比较特殊的,要抓网页图片的话,这个图片是不能从天猫里面直接找到的,首先看一下图片的链接,它的后缀是185,其实这个图片信息没有隐藏在天猫代码里,隐藏在后面的 js 里,是一个变量的数目形式。往后拉一下,可以看到后面刚才链接的就是在这个地方,它把整个的链接组图复制成 gallery 变量,这时候常用的一些解析括 count sub 不能用了,需要正则表达式表把这个变量提取出来,再用格式化一下,提取里面的信息。所以说一般的网页可以用解析库来提取。

等一些特殊网页的结果,就不能用练习自习库,这时候就需要用到正则表达式提取相关信息。接下来再看一个事例,这里是有一些日志文件,比如说这里是一些报错的日志文件,接下来可以看到一些非常杂乱的一些信息,这都是一些运行错误的日志,那么可以看到比如说小提取一些里面的一些时间信息,这时候可以用一个正则表达式的一个串写一个时间的匹配模式,就可以把所有的时间提取出来,那么这就是正则表达式对于数据筛选清洗之类的一些非常强大的操作。所以说学习正则表达式非常有用处。

接下来讲解一下正则表达式 Pathon re 模块 相关 epa,正则表达式的相关操作,

在这里打开字符文件,这里首先列出了常见的匹配模式,比如说\w 是匹配字母数字及下划线,\s 是匹配空白或非空白字符,\D 是匹配数字的,那么还有一个点是换行符匹配任意的字符,也可以指定一个匹配模式,比如说写一个 res,就可以匹配上任意字符,那个中括号里面变出一些字符,可以匹配中括号里面的所有字符,那么还有新号加号来匹配一些个数的,还有那个中括号是精确匹配到正则表达式,还有这个问号是指定匹配零个或一个由前面的正则表达式定义的片段。这个大括号N 指定一个数字,然后就可以精确匹配指定前面的表达式,再往后还有小括号符号等等之类。接下来可以用 re 模块实例简单的写几个样例,来感受一下正则表达式的用法,首先来看一下 re.match 函数就是用来检测写的正则表达式和要传入的字符串是否匹配?

那么它是从字符串的第一位开始匹配,然后再依次的对正则表达式和目标字符串匹配校验,那么如果匹配成功的话,那么它就会返回匹配结果,失败的话就会返回no。

这个方法有三个参数,第一个就是写的正则表达式,第二个匹配的目标字符串,第三个就是一个匹配模式。那么接下来就用一个实例来看一下正则表达式的一个用法,那么这里写了一个字符串,首先写一个 re.match 第一个参数就是要写的这个正则表达式,那么可以先写一个用来匹配 patter ,再把 result 字符串写过来,hello 写过来,它是一个空格看一下前面,它有一个\s,接下来后面三个数字123,那么这里有一个\d可以匹配任意数字,可以写入3\d可以进行匹配,后面还有一个空白字符,再写一个\s,后面还有4567,那写四个\d 是不是很麻烦?

那么在这里还有另外一个匹配模式,有一个中括号,可以用一个中括号里面写一个四可以匹配四个\d ,那么后面还有一个空白字符\s,然后再后面有一个长的字符串,再用另外一个匹配模式比如\w,它是可以匹配字母的,写一个\w,后面看一下有多长?

一共有十个长度,直接用中括号十,然后也可以这么匹配,那么接下来后面那么一长串字符不想写了,直接用这么一个点全部来代替,因为这个点可以代替任意字符,还有一个新可以匹配零个或多个表达式可以匹配任意字符,比如说点心可以匹配任意的字符,除了换行符,那在后面直接写入一个结尾字符 Demo$.,指定一下正则表达式的结尾,第二个参数就是把这个字符串传过来,然后接下来把这个结果打印出来,然后运行一下,可以看到在输入结果中,就是有一个正常的输出,匹配的长度,那么另外首先把这个长度打印一下,另外这个匹配结果对象有一些方法,比如说 result ,这个 group 就可以返回匹配结果。另外还有一个方法比就是redult.span,这个 span 可以输出匹配结果的范围。

可以看到这里输出了结尾字符串的长度,这个 group 信息也就是匹配结果。然后这个 spant 结果0到41,也就是说整个字符串被正则表达式匹配过来,那么这里就也就是演示了 match 函数的用法。

接下来看一下另外的匹配。刚才写了这么长的一个正则表达式\s\d,这样的话,正则表达式就显得非常繁琐而且通用性不强。

那么有一个非常好的方法就是用刚才的点新来匹配所有的字符串,那么接下来首先输入 hello * 最后输入 Demo$,这样的话,可以把中间所有的字符都匹配过来了,然后看一下匹配结果,把刚才的输出都打印下 result group span,这边的还是像刚才输出一样,都是输出了一个这样的匹配结果,写这个匹配范围也是0到41,比如说这个点心把中间所有的都匹配到, 所以说为了匹配方便,尽量使用点星写正则表达式。

相关文章
java202303java学习笔记第二十七天-正则表达式之3
java202303java学习笔记第二十七天-正则表达式之3
41 0
java202303java学习笔记第二十八天-正则表达式基本练习2
java202303java学习笔记第二十八天-正则表达式基本练习2
65 0
java202303java学习笔记第二十八天-正则表达式基本练习1
java202303java学习笔记第二十八天-正则表达式基本练习1
60 0
java202303java学习笔记第二十八天-正则表达式基本练习3 原
java202303java学习笔记第二十八天-正则表达式基本练习3 原
50 0
java202303java学习笔记第二十七天-正则表达式基本练习1
java202303java学习笔记第二十七天-正则表达式基本练习1
66 0
java202303java学习笔记第二十七天-正则表达式之2
java202303java学习笔记第二十七天-正则表达式之2
59 0
java202303java学习笔记第二十七天-正则表达式之1
java202303java学习笔记第二十七天-正则表达式之1
58 0
java202303java学习笔记第二十七天-正则表达式之4
java202303java学习笔记第二十七天-正则表达式之4
40 0
java202303java学习笔记第二十七天-正则表达式之3
java202303java学习笔记第二十七天-正则表达式之3
41 0
|
开发者 Python
正则表达式4|学习笔记
快速学习正则表达式4
正则表达式4|学习笔记