错过了秋招学习春招感觉是满满的绝望啊。希望大家抓紧时间,努力学习。
正则表达式是处理字符串的强大工具,也是从HTML网页源代码中提取信息的常用方法之一,用于实现字符串的检索、替换、匹配验证等功能。下表列出了常用的匹配规则。
调用程序包re的函数search()匹配满足正则表达式的第一条结果,其中
第1个参数pattern表示正则表达式对象或字符串;
第2个参数string表示待匹配的字符串;
第3个参数flag表示修饰符,'re.S'表示通配符.可以匹配包括换行符在内的所有字符,如果不设置则通配符.不能匹配换行符。
该网页的标题是在标签之间,使用正则表达式匹配,其中
\S匹配非空字符;
- 匹配0个或多个表达式。
如果没有匹配到任何结果,则返回None,否则返回一个Match对象。
调用该对象的函数group()返回匹配结果。
1. 使用括号()匹配目标
如果只想匹配标题而不想包含标签,则只需要在感兴趣的内容两边加上括号()。此时调用返回的Match对象的函数group(),不传入任何参数,则仍然会返回完整匹配结果。 而只需要在该函数中传入一个序号就可以返回感兴趣的内容。由于这里的正则表达式只包含了一组括号(),因此仅仅传入序号1有效。
该网页的标题为“百度新闻搜索_人工智能”,如果想分别匹配下划线_前后的两个部分,可以分别使用两对括号()。此时调用返回的Match对象的函数group(),传入序号1返回第1个括号对应的内容,传入序号2返回第2个括号对应的内容。
2. 使用星号*做通用匹配
之前的例子中正则表达式包含了完整的标签,也可以使用星号做通用匹配,如以<ti.>和</ti.>取代,其中.匹配了tle。
该网页找到的相关新闻篇数在标签和之间,使用正则表达式nums.*约([\d,]+)匹配,其中
*匹配">找到相关新闻;
\d匹配数字;
[\d,]匹配数字或逗号,;
+匹配1个或多个表达式。
3. 贪婪与非贪婪
正则表达式匹配时,匹配数量可多可少,如上一个例子中([\d,]+)最少匹配1,最多匹配187,000。
最少匹配也称为非贪婪匹配,在+后面加上?表示非贪婪匹配;
最多匹配也称为贪婪匹配,不加上?则默认表示贪婪匹配。
以下例子为非贪婪匹配,可以看出仅匹配了第一个数字。
4. 修饰符re.S
在网页源代码中找到相关新闻约187,000篇的上一行为
原因在于.在默认情况下不能匹配换行符。调用程序包re的函数search()时,指定第3个参数flag修饰符为re.S则可以让.匹配换行符。
同样的,在匹配搜索结果的标题时,我们发现标题是单独的一行,且位于标签<h3 class="c-title">中。使用正则表达式c-title">.?>\n(.?)匹配,并指定修饰符为re.S。
5. 匹配多个结果
从上一小节的例子可以看出,虽然该网页包含10条新闻搜索结果,但程序包re中的函数search()仅返回了第一条匹配结果,而另一个函数findall()则可以返回所有匹配结果,参数列表与函数search()完全相同。 不同的是,返回结果是匹配目标的列表。