Python正则表达式re.compile()和re.findall()详解

 更新时间:2022年07月07日 09:39:37   作者:扒啦啦能量  
re 模块提供了不少有用的函数,用以匹配字符串,下面这篇文章主要给大家介绍了关于Python正则表达式re.compile()和re.findall()的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

前言

在使用爬虫提取网页中的部分信息时,采用到了re.compile()与re.findall()两种方法,目的:把网页中的“某某城市土地规划表”截取并打印出来.

网页中的代码:

 <span class='tab-details'>某某城市土地规划表</span>

提取的方法:

def parse_response(html):
    pattern = re.compile('class=\'tab-details\'>(.*?)</span>',re.S)
    items = re.findall(pattern,html)  
    print(items)
    
    return items

结果:

['某某城市土地规划表']

这里主要讲解pattern,re.compile()与re.findall()的定义及用法:

1.pattern :pattern 属性规定用于验证输入字段的正则表达式。

2.re.compile():compile() 方法用于在脚本执行过程中编译正则表达式,也可用于改变和重新编译正则表达式。

举例:在字符串中全局搜索 "man",并用 "person" 替换。然后通过 compile() 方法,改变正则表达式,用 "person" 替换 "man" 或 "woman",:

<script type="text/javascript">
var str="Every man in the world! Every woman on earth!";
 
patt=/man/g;
str2=str.replace(patt,"person");
//用person取代man
document.write(str2+"<br />");
 
patt=/(wo)?man/g;
patt.compile(patt);
str2=str.replace(patt,"person");
//用person取代man或者woman
document.write(str2);
 
</script>

输出:(可见第一行中的man都被person取代,出现了woperson,第二行的的man和woman也被person取代,只有person,没有其他奇奇怪怪的字符串)

Every person in the world! Every woperson on earth!
Every person in the world! Every person on earth!

3.re.findall():额,这个最难搞,主要是为了讲解(.*?)

re.findall()函数是返回某种形式(比如String)中所有与pattern匹配的全部字符串,返回形式为数组。

下面是findall()函数的两种表示形式:(上面的代码采取的便是第二种形式):

import re
kk = re.compile(r'\d+')
kk.findall('one1two2three3four4')
#[1,2,3,4]
 
#注意此处findall()的用法,可传两个参数;
kk = re.compile(r'\d+')
re.findall(kk,"one123")
#[1,2,3]

下面的是常用的正则表达式:

import re
 
str = 'aabbabaabbaa'
 
# 一个"."就是匹配除 \n (换行符)以外的任意一个字符
print(re.findall(r'a.b',str))#['aab', 'aab']
 
# *前面的字符出现0次或以上
print(re.findall(r'a*b',str))#['aab', 'b', 'ab', 'aab', 'b']
 
# 贪婪,匹配从.*前面为开始到后面为结束的所有内容
print(re.findall(r'a.*b',str))#['aabbabaabb']
 
# 非贪婪,遇到开始和结束就进行截取,因此截取多次符合的结果,中间没有字符也会被截取
print(re.findall(r'a.*?b',str))#['aab', 'ab', 'aab']
 
# 非贪婪,与上面一样,只是与上面的相比多了一个括号,只保留括号的内容
print(re.findall(r'a(.*?)b',str))#['a', '', 'a']
 
str = '''aabbab
         aabbaa
         bb'''     #后面多加了2个b
 
# 没有把最后一个换行的aab算进来
print(re.findall(r'a.*?b',str))#['aab', 'ab', 'aab']
 
# re.S不会对\n进行中断
print(re.findall(r'a.*?b',str,re.S))#['aab', 'ab', 'aab', 'aa\n         b']

注意'.*?'是对它的前后部分作为开始结束部分进行截取,而'(.*?)'也是把其前后作为开始结束,但是只截取括号部分,不包含开始结束部分!!!(同时在对前后部分的选择时要注意特征明确点,就是与众不同的的嘛,防止截取出的是其他部分啊)

re.findall中参数re.S的意义:

1.字符串变为(后面多加了2个b)

str = '''aabbab
         aabbaa
         bb'''

2.参数无re.S,没有把最后一个换行的aab算进来

print(re.findall(r'a.*?b',str))
#['aab', 'ab', 'aab']

3.参数有re.S,不会对\n进行中断

print(re.findall(r'a.*?b',str,re.S))
#['aab', 'ab', 'aab', 'aa\n         b']

在我们一开始的代码中就有re.s,因为在爬取网页的内容时是按照一个一个块的来爬取,可以理解为并列部分,会存在/n分行符。

def parse_response(html):
    pattern = re.compile('class=\'tab-details\'>(.*?)</span>',re.S)
    items = re.findall(pattern,html)  
    print(items)
    
    return items

参考:

1.HTML input pattern 属性 

2.Pattern用法(正则表达式)

3.JavaScript compile() 方法

4.Python 正则表达re模块之findall()详解

总结

到此这篇关于Python正则表达式re.compile()和re.findall()的文章就介绍到这了,更多相关Python正则re.compile()和re.findall()内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 弄懂这56个Python使用技巧(轻松掌握Python高效开发)

    弄懂这56个Python使用技巧(轻松掌握Python高效开发)

    这篇文章主要介绍了弄懂这56个Python使用技巧(轻松掌握Python高效开发),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-09-09
  • python 定义给定初值或长度的list方法

    python 定义给定初值或长度的list方法

    今天小编就为大家分享一篇python 定义给定初值或长度的list方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Python Jinja2 库灵活性广泛性应用场景实例解析

    Python Jinja2 库灵活性广泛性应用场景实例解析

    Jinja2,作为Python中最流行的模板引擎之一,为开发者提供了强大的工具,用于在Web应用和其他项目中生成动态内容,本文将深入研究 Jinja2 库的各个方面,提供更丰富的示例代码,能够充分理解其灵活性和广泛应用的场景
    2024-01-01
  • python可视化 matplotlib画图使用colorbar工具自定义颜色

    python可视化 matplotlib画图使用colorbar工具自定义颜色

    这篇文章主要介绍了python可视化 matplotlib画图使用colorbar工具自定义颜色,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • python三大器之迭代器、生成器、装饰器

    python三大器之迭代器、生成器、装饰器

    迭代是Python最强大的功能之一,是访问集合元素的一种方式;迭代器是一个可以记住遍历的位置的对象,本文给大家介绍python三大器之迭代器、生成器、装饰器的相关知识,感兴趣的朋友跟随小编一起看看吧
    2022-01-01
  • python爬虫获取京东手机图片的图文教程

    python爬虫获取京东手机图片的图文教程

    下面小编就为大家分享一篇python爬虫获取京东手机图片的图文教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • Python Tkinter Entry和Text的添加与使用详解

    Python Tkinter Entry和Text的添加与使用详解

    这篇文章主要介绍了Python Tkinter Entry和Text的添加与使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • 带你一文搞懂Python文件的读写操作

    带你一文搞懂Python文件的读写操作

    读写文件是最常见的IO操作,Python内置了读写文件的函数,下面这篇文章主要给大家介绍了关于Python文件读写操作的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • Pandas.DataFrame的行名和列名的修改

    Pandas.DataFrame的行名和列名的修改

    本文主要介绍了Pandas.DataFrame的行名和列名的修改,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Python获取网络时间戳的两种方法详解

    Python获取网络时间戳的两种方法详解

    在我们进行注册码的有效期验证时,通常使用获取网络时间的方式来进行比对。本文将介绍两种利用Python获取网络时间戳的方法,感兴趣的可以了解一下
    2022-01-01

最新评论