正则表达式(浅学)

2022-09-20 18:59:11 浏览数 (1)

正则表达式(regular expression)的含义:

描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。正则表达式并不局限于python,各个语言之间都是通用的,所以十分重要,在聚焦爬虫的数据解析中会用到。

由于在pycharm中运行起来有点麻烦,还需要输入代码,因此我使用在线验证网站:https://regex101.com/

打开后是这样的:

我们选择->

此处的r是为了保留原格式,防止转义

正则表达式的常见特殊元字符有以下几个:

. * ? [ ] ^ $ { } | ( )

以下将逐一讲解

点-匹配所有字符(.)

. 表示要匹配除了换行符之外的任何单个字符。

例如,以下的文本中,我们想要提取出所有的颜色。

苹果,是绿色的

橙子,是橙色的

香蕉,是黄色的

乌鸦,是黑色的

要提取出所有的颜色,那就是把“色”字之前的一个字符取到即可,那么我们可以这么做:

匹配到的结果会高亮显示,或者看旁边的匹配信息

在pycharm中可以这么写:

代码语言:javascript复制
import re  #导入模块
msg = """苹果,是绿色的
        橙子,是橙色的
        香蕉,是黄色的
        乌鸦,是黑色的"""
result = re.findall(r".色", msg, re.M)  #re.M的作用是多行模式,可以逐行匹配,否则就是全文匹配
print(result)
结果:
['绿色', '橙色', '黄色', '黑色']

星号-重复匹配任意次(*)

* 表示匹配前面的子表达式任意次,包括0次。

文本:

苹果,绿色的

橙子,橙色的

香蕉,黄色的

乌鸦,黑色的

猴子,

现在你要从下面的文本中,选择每行逗号后面的字符串内容,包括逗号本身。注意,这里的逗号是中文的逗号。

我们只需:

注意,此处的猴子后面的逗号也被匹配到了,因为0次也会匹配。

而“ ”和“*”的不同就在于“ ”匹配的次数大于等于1次,也就是说至少要有一次:

可见猴子后面的逗号没有被匹配到。

问号-匹配0-1次

?表示匹配前面的子表达式0次或1次

我们前面的*和 都是贪婪匹配,也就是尽可能多次的匹配,而?就是非贪婪匹配,请看下面的例子:我们想把<>以及里面的内容提取出来

这样匹配了全文

这样才是我们想要的结果

如果使用贪婪匹配,则会把所有的<>都匹配到,从头到尾读匹配到。

花括号-匹配指定次数 { }

{m}表示匹配m次

{m,}表示匹配大于m次

{m,n}表示匹配 m<=次数<=n次

未完待续 剩下的写正则难点

0 人点赞