正则表达式的高级使用


本篇正则的博文内容是基于前文的“初探正则”的版本之上的,有兴趣的朋友可以看一下
链接: 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]

猜你喜欢

转载自blog.csdn.net/weixin_42250835/article/details/86766734