本篇正则的博文内容是基于前文的“初探正则”的版本之上的,有兴趣的朋友可以看一下
链接: https://blog.csdn.net/weixin_42250835/article/details/86698163
贪婪与非贪婪
也叫“贪婪与懒惰”
'''
贪婪:尽可能多的匹配
非贪婪:尽可能少的匹配
非贪婪操作符:"?"
非贪婪操作符可用在 *、+、? 的后面
*:重复0次或者是多次
+:重复1次或者是多次
?:重复0次或1次
'''
import re
str = "greedyaiiiiiiii"
reg1 = "greedyai*" #贪婪
reg2 = "greedyai*?" #非贪婪
print(re.findall(reg1,str)) #输出结果为:greedyaiiiiiiiii
print(re.findall(reg2,str)) #输出的结果为:greedya
分之条件匹配
#分之条件匹配
#以一些电话号码为例
phone_num = "phone number : 010-88776655 0431-89876567 0432-9876789"
reg_p_num = "0\d{2}-\d{8}|0\d{3}-\d{7}|0\d{3}-\d{8}" #"|":代表或
print(re.findall(reg_p_num,phone_num))
捕捉与不捕捉
#捕捉与不捕捉
ip_num = "1234.1543.123.12 255.255.133.255 0.0.144.0 192.168.111.1"
reg_ip1= "(\d{1,3\.{3}\d{1-3})" #(\d{1,3\.{3}:组(数字1-3个,匹配3次+"."),这就是捕捉
reg_ip = "(?:\d{1,3\.{3}\d{1-3})" #这是非捕捉 ?:
#捕捉模式:捕捉的是连续符合正则表达式中组内的最后一个组的内容
#非捕捉:不破坏正则表达式的整体性,匹配全部
str_url = "greedyai address url:http://greedyai.com"
#reg_url = "http://[w]{3}\.[a-z]*\.com"
reg_url = "http://(?:w){3}\.[a-z]*\.com"
print(re.findall(reg_url,str_url))
零宽断言
#零宽断言
'''
(?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置
(?!exp) 匹配后面跟的不是exp的位置
(?<!exp) 匹配前面不是exp的位置
exp:正则表达式的意思
'''
str_hello = "hellogreedyailove"
reg_str_1 = "l{2}o(?=greedyai)"
print(re.findall(reg_str_1,str_hello)) #打印输出['llo']
reg_str_2 = "(?<=greedyai[a-z])*"
print(re.findall(reg_str_2,str_hello)) #打印输出['love']
reg_str_3 = "lo(?!greedyai)"
print(re.findall(reg_str_3,str_hello)) #打印输出['lo']
reg_str_4 = "(?<!greedyai)l"
print(re.findall(reg_str_4,str_hello)) #打印输出['l','l's]