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 没空格了
#
要提取出来最重要的就是关闭贪婪模式,
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)