Python re.findall中(.*?)使用详解

看了网上很多大佬的博客,感觉受益匪浅,所以我也来发表一下自己的理解,废话不多说,直接上代码。

这里我们引用re模块,然后定义一个字符串

import re
str='jjjjjkkkkkjkjjjkjjkjj'

1,一个.

这一个.的作用就是,匹配从j开始为第一个字符,k结束为第三个字符,中间的点为第二个字符组成的字符串,在上面的str里面从左往右依次找,从第一个j开始然后往后找,找到jjk就能匹配了,相当于就是j和k是必须在第一个和第三个,中间夹个什么无所谓,但是必须要夹一个,那个.相当于就是代替中间夹的那个。

real=re.findall('j.k',str)
#j和k中间的.,就是匹配除了\n(换行符)之外的任意一个字符

看看运行结果,运行返回的是一个列表。

2,一个*,匹配*前面出现大于等于0次的字符

这个*前面的字符也就是j,要匹配的就是有没有j的都行,但是结尾必须是k,因为是在*之前出现的字符,大于等于0,也可以是零个,所以从头开始找就有,jjjjjk,j出现了五次,符合条件,k(第二个k),j出现了0次,k(第三个k),j出现了0次,以此类推

real=re.findall('j*k',str)
#这个*的意思就是匹配,在*之前的字符出现大于等于0次的

看看运行结果,分别是j出现了5次,0次,0次,0次,0次,1次,3次,2次

3,.*贪婪,在.*前面的字符开始,后面的字符结束,能包含的最长的一串字符串

这个.*就是匹配从j开始,k结束,你能看到的最长的一串,所以这里匹配到的就是jjjjjkkkkkjkjjjkjjk

real=re.findall('j.*k',str)
#.*贪婪,贪婪就是越多越好,所以就是匹配.*前面的字符为开始,后面的字符为结束的所有内容

看看结果,果然就是从第一个j开始,到最后一个k结束,最后两个j没有算进去就是因为是以k结束

4,.*?非贪婪,以.*?前面的字符为开始,后面的字符为结束,进行包含,中间没有字符也可以

这个.*?也叫非贪婪,就是没有上一个这么贪,上一个想把看到的都包含进去,这个就是有j和k的就行,不管中间有没有字符,也是从第一个j开始,从左往右开始匹配,走过的就不走了,第一个匹配到的就是jjjjjk,有j,有k,中间有四个j,第二个匹配到的是jk,第三个是jjjk,这个中间夹了两个,但是也符合规定,因为是以j开始,k结束的,第四个是jjk

real=re.findall('j.*?k',str)
#.*?就是非贪婪,.*?前面的字符为开始,后面的字符为结束开始匹配,中间没有字符也可以匹配

看看结果,果然如我所料

5,(.*?)非贪婪pro,以(.*?)前面的字符为开始,后面的字符为结束,取包含在中间的字符

最后一个(.*?)非贪婪升级版,这个是只取j和k中间的,这个更不贪,第一个匹配的j和k中间的就四个j,炸弹,所以就取jjjj,第二个j和k中间的就是空,就没有,那就取' ',第三个j和k中间的是两个j,就取jj,第四个j和k中间的是一个j,就取j

real=re.findall('j(.*?)k',str)
#(.*?),我称它为非贪婪加强版,只保留(.*?)前面的字符和后面的字符中间夹的内容

看看结果

谢谢大家阅读,如果有什么问题欢迎大家指正。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
re.findall()函数的参数是正则表达式模式(pattern)和待匹配的字符串(string)。正则表达式模式用来描述要匹配的字符串的规则,而待匹配的字符串是需要进行匹配的目标字符串。re.findall()函数会返回所有与正则表达式模式匹配的字符串,并以数组的形式返回。 #### 引用[.reference_title] - *1* [Python 之正则表达re.compile()与re.findall()详解](https://blog.csdn.net/yur_ke/article/details/123931594)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [re.findall()用法详解](https://blog.csdn.net/weixin_44799217/article/details/122069533)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Python 正则表达re模块之findall()详解](https://blog.csdn.net/WUNEAL/article/details/119646800)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值