正则表达式
正则表达式是一种用来匹配字符串的强有力的武器。设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,就认为它“匹配”,否则就不匹配。
使用re模块进行正则表达式
匹配字符串
1.用match()方法匹配(从字符串开头开始匹配)
import re #导入re模块
pattern = r'mr_\w' # 定义模式字符串
string = 'MR_SHOP mr_shop' #要匹配的字符串
match = re.match(pattern,string,re.I) #匹配字符串 ,第三个可选参数re.I表示不区分大小写,默认区分大小写
print(match) #输出
<_sre.SRE_Match object; span=(0, 4), match='MR_S'>
#获取起始位置和结束位置
print("起始位置:",match.start())
print("结束位置:",match.end())
print("匹配数值:",match.group())
起始位置: 0
结束位置: 4
匹配数值: MR_S
#例 将上述字符串中的S换成汉字“我”
import re #导入re模块
pattern1 = r'mr_\w' # 定义模式字符串
string1 = 'MR_我HOP mr_我hop' #要匹配的字符串
match1 = re.match(pattern1,string1,re.I) #匹配字符串 ,第三个可选参数re.I表示不区分大小写,默认区分大小写
print(match1) #输出
<_sre.SRE_Match object; span=(0, 4), match='MR_我'>
#获取起始位置和结束位置
print("起始位置:",match1.start())
print("结束位置:",match1.end())
print("匹配数值:",match1.group())
起始位置: 0
结束位置: 4
匹配数值: MR_我
#例 在字符串前面加上其它元素
pattern2 = r'mr_\w' # 定义模式字符串
string2 = '我爱祖国MR_SHOP mr_shop' #要匹配的字符串
match2 = re.match(pattern2,string2,re.I) #匹配字符串 ,第三个可选参数re.I表示不区分大小写,默认区分大小写
print(match2) #输出
None
# 验证输入手机号码是否合法,假设中国移动的号码为13开头,第三位是4-9,后八位是任意数字或15开头,第三位是01289,后八位是任意数字
import re
patt = r'(13[4-9]\d{8})|(15[01289]\d{8})$' #中国移动手机号规则模式
mobile = "13612345678" #要匹配的手机号码
match = re.match(patt,mobile)
if match == None:
print(mobile,"不是中国移动的手机号码")
else :
print(mobile,"是中国移动的手机号码")
13612345678 是中国移动的手机号码
#更换一个不符合移动手机号码的电话
import re
patt = r'(13[4-9]\d{8})|(15[01289]\d{8})$' #中国移动手机号规则模式
mobile2 = "13356789876" #要匹配的手机号码
match = re.match(patt,mobile2)
if match == None:
print(mobile2,"不是中国移动的手机号码")
else :
print(mobile2,"是中国移动的手机号码")
13356789876 不是中国移动的手机号码
2.用search()方法在整个字符串中匹配第一个符合要求的字符,不匹配后面满足条件的字符
#采用上述例子,字符串前面加上其它字符后进行匹配
import re
pattern3 = r'mr_\w' # 定义模式字符串
string3 = '我爱祖国MR_SHOP mr_shop' #要匹配的字符串
match3 = re.search(pattern3,string3,re.I) #匹配字符串 ,第三个可选参数re.I表示不区分大小写,默认区分大小写
print(match3) #输出
<_sre.SRE_Match object; span=(4, 8), match='MR_S'>
#例 字符中是否含有颜色字符
import re
patt1 = r'(黄色)|(蓝色)|(紫色)|(黑色)' #定义模式
a1 = "我喜欢的颜色包括红色和紫色" # 定义字符串
search1 = re.search(patt1,a1)
if search1 == None:
print(a1,"不存在含有颜色的字符")
else:
print(a1,"存在含有颜色的字符")
我喜欢的颜色包括红色和紫色 存在含有颜色的字符
#换一句不存在颜色的字符串语句
a2 = "今天的天气真好呀,适合游玩!"
search2 = re.search(patt1,a2)
if search2 == None:
print(a1,"不存在含有颜色的字符")
else:
print(a1,"存在含有颜色的字符")
我喜欢的颜色包括红色和紫色 不存在含有颜色的字符
3.用findall()匹配整个字符串中所有满足条件的字符,输出结果为列表形式
#继续使用前面的例子
import re #导入re模块
pattern4 = r'mr_\w' # 定义模式字符串
string4 = 'MR_SHOP mr_shop' #要匹配的字符串
match4 = re.findall(pattern4,string4,re.I) #匹配字符串 ,第三个可选参数re.I表示不区分大小写,默认区分大小写
print(match4) #输出
['MR_S', 'mr_s']