python正则表达式:贪婪与非贪婪

python正则表达式:贪婪与非贪婪,第1张

贪婪与非贪婪

python里的数量词默认是贪婪的,总是尝试尽可能的匹配更多的字符。python中使用?号关闭贪婪模式

import re
print(re.match(r"aa\d+","aa2323"))   #会尽可能多的去匹配\d
# 
print(re.match(r"aa\d+?","aa2323"))  #尽可能少的去匹配\d
# 
import re
s = "this is a number 234-235-22-423"
# 1.贪婪模式
resule = re.match(r"(.+)(\d+-\d+-\d+-\d)",s)   #我们本想数字和字母拆解成两个分组
#('this is a number 23', '4-235-22-4')
#d+后面的是分隔符 后面是RP测试
resule2 = re.match(r"(.+)(\d+\d+\d+-\d)",s)
#('this is a number 234-', '235-2')
print(resule.groups())  #('this is a number 23', '4-235-22-4')但我们发现输出的结果中23的数字竟然被弄到前面去了
print(resule2.groups())
#因为+它会尽可能多的进行匹配,\d,只需要一个4就能满足,所以前面就尽可能多的匹配
# 2.关闭贪婪模式
#在数量词后面加上 ?,进入非贪婪模式,尽可能少的进行匹配
result = re.match(r"(.+?)(\d+-\d+-\d+-\d)",s)
print(result.groups())   #('this is a number ', '234-235-22-4')
# ('this is a number ', '234-235-22-4')
RP = "this is a number234-235-22-423"
# RP测试空格
resule3 = re.match(r"(.+)(\d+-\d+-\d+-\d)",RP)
print(resule3.groups())
#('this is a number23', '4-235-22-4') 
RP = "this is a number234-235-22-423"
# RP测试
resule4 = re.match(r"(.+?)(\d+-\d+-\d+-\d)",RP)
print(resule4.groups())
#('this is a number', '234-235-22-4')
案例 匹配手机号

要求,手机号为11位,必须以1开头,且第二个数字为35678其种一个

import re
result = re.match(r'1[35678]\d{9}','13111111111')
print(result.group())   #匹配成功
# 13111111111
result2 = re.match(r'1[35678]\d{8}','13111111111')#RP测试
print(result2.group())   #匹配成功
# 1311111111
result = re.match(r'1[35678]\d{9}','15111111111')
print(result)     #none,第二位为2
# None
result = re.match(r'1[35678]\d{9}','121111111112')
print(result)     #none,有12位
# None
提取网页源码中所有的文字

如下,将其中的所有文字提取出来,去掉标签。思路就是运用sub方法,将标签替换为空

import re
s = """

阿P的哲学:

完成推荐算法、数据统计、接口、后台等服务器端相关工作


必备要求:

良好的自我驱动力和职业素养,工作积极主动、结果导向

 

技术要求:

1、一年以上 Python开发经验,掌握面向对象分析和设计,了解设计模式

""" result = re.sub(r'<.*?>| ','',s) # #sub(要替换的数据,替换成什么,要替换的数据所在的数据)#RP:这样写通俗易懂啊 print(result) # 阿P的哲学: # 完成推荐算法、数据统计、接口、后台等服务器端相关工作 # # 必备要求: # 良好的自我驱动力和职业素养,工作积极主动、结果导向 # ; # 技术要求: # 1、一年以上 Python开发经验,掌握面向对象分析和设计,了解设计模式 result2 = re.sub(r'<.*?>','',s) print(result2) # 阿P的哲学: # 完成推荐算法、数据统计、接口、后台等服务器端相关工作 # # 必备要求: # 良好的自我驱动力和职业素养,工作积极主动、结果导向 #   ##RP 这是空格 # 技术要求: # 1、一年以上 Python开发经验,掌握面向对象分析和设计,了解设计模式 result3 = re.sub(r' ','',s) print(result3) # #

阿P的哲学:

#

完成推荐算法、数据统计、接口、后台等服务器端相关工作

#


#

必备要求:

#

良好的自我驱动力和职业素养,工作积极主动、结果导向

#

;

#

技术要求:

#

1、一年以上 Python开发经验,掌握面向对象分析和设计,了解设计模式

# ##RP 没空格了 #

 要提取出来最重要的就是关闭贪婪模式,

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/915911.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存