正则表达式-前后查找(六)

来源:互联网 发布:python 能做界面吗 编辑:程序博客网 时间:2024/06/07 02:43

前面讲到的正则表达式都是如何匹配表达式所表达的意思,如[a-z]+是匹配1个以上a-z的字母。今天我们讲到的是前后查找的例子,首先我们讲到向前查找的语法:

    (?=表达式)

我们举一个例子,假设我们在如下列表中想获取协议名

http://ftp://https://

按照我们一般的写法是

 [a-z]+:

这样写存在一个问题,就是会匹配“:”本身。这样就不是想要的结果,如果不想要匹配冒号本身,就需要使用本章介绍的向前匹配,基本的思路使用冒号先前匹配一系列字母:

[a-z]+(?=:)

这样匹配的结果就是

httpftphttps

这样就符合我们的要求了,既返回了我们想要的协议列表。

接下来我们讲到向后匹配,同样的我们来说语法,向后匹配的语法与向前匹配很像,只是加了一个箭头:

(?<=表达式)

假设我们要匹配一下列表中的数字:

$12.36$25.36$45.65

如果仅需要匹配数字,而不是“$”符号,同前面一样,我们需要使用向后匹配,按照前面的写法,写成是这样的:

    (?<=\$)[0-9.]+

最终匹配的结果就是:

12.3625.3645.65

如果综合运用向前和向后匹配,我们可以举一个扒网页的例子,一般html语法是这样的,如爬取到的网页标题一般是这样的:

<title> this is title</title>

那么如何获取title标签内部的值,而不匹配或消费本身呢?最终的表达式应该是如下,有兴趣可以仔细研究下这种写法

(?<=<title>).*?(?=</title>)
0 0
原创粉丝点击