说说Python中贪婪和非贪婪匹配?


公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助!

小猿会从最基础的面试题开始,每天一题。如果参考答案不够好,或者有错误的话,麻烦大家可以在留言区给出自己的意见和讨论,大家是要一起学习的 。

废话不多说,开始今天的题目:

问:说说Python中贪婪和非贪婪匹配?

答:Python 中默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符;

而非贪婪匹配:与贪婪匹配相反,非贪婪匹配在匹配字符串时总是尝试匹配尽可能少的字符。

只需要在量词 "*","?","+","{m,n}" 后面直接加上一个问号”?”,就可以使贪婪变成非贪婪。

python的正则表达式中的量词
符号 描述
* 匹配零次或多次
+ 匹配一次或多次
? 匹配一次或零次
{m} 重复m次
{m,n} 重复m到n次(m - n-1),其中n可以省略,表示m到任意次

下面用个简单的代码给大家看一下:

import re

num = '123456768'
# 匹配一串数字,只匹配到了一个
result01 = re.search(r"\d",num).group()
print(result01)

# 增加了 + 号之后,就可以匹配多个了,此时可以算是贪婪模式
result02 = re.search(r"\d+",num).group()
print(result02)

# 那么想要变回非贪婪的话,只要增加一个?号即可
result03 = re.match(r"\d+?",num).group()
print(result03)

运行结果:
1
123456768
1

如果对于参考答案有不认同的,大家可以在评论区指出和补充,欢迎留言!

1-40、Python面试1-40题汇总

41、说说Python中的正则表达式?
42、Python如何实现斐波那契数列?
43、说说Python 中 is 和 == 的区别?
44、说说Python如何实现杨辉三角?
45、说说Python中变量的作用域?
46、Python打印九九乘法表有几种方式?
47、Python中列表常见的方法有哪些?
48、说说Python中yield的用法?
49、说说Python中元类是什么?
50、Python中几种常见的排序算法?
51、说说Python中闭包是什么?
52、read、readline和readlines的区别?
53、说说Python中with的用法?
54、Python中连接字符串用join还是+?
55、Python中search和match的区别?
56、说说Python中字符串大小写转换?
57、Python反转三位整数有几种方法?

关注小猿公众号,每天学习一道题

发布了132 篇原创文章 · 获赞 45 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/liliangpin/article/details/103249227