其他分享
首页 > 其他分享> > 正则表达式的系统学习

正则表达式的系统学习

作者:互联网

正则表达式的系统学习

概念:

1.正则表达式的7种境界

#正则表达式的7个境界

# level1 - 固定的字符串
import re

 print(re.findall(r'168', text)) #fianall返回的是一个列表

level2 - 某一类字符

print(re.findall(r'\d', text)) #\d返回的是单个数字
print(re.findall(r'\d', text)) #\d返回的是单个数字
print(re.findall(r'\D', text)) #\D返回的是非数字
print(re.findall(r'\w', text)) #\w返回的是非标点符号的其他字符
print(re.findall(r'[1-5]', text)) #[]表示从中挑一个就行
print(re.findall(r'[高重非]', text)) #[]表示从中挑一个就行

# level3 - 重复某一类字符

text = '麦叔身高:178,体重:168,学号:123456,密码:9527'
print(re.findall(r'\d+', text)) #+修饰前边的内容
print(re.findall(r'\d?', text)) #?表示0个或1个,结果为['', '', '', '', '', '1', '7', '8', '', '', '', '', '1', '6', '8', '', '', '', '', '1', '2', '3', '4', '5', '6', '', '', '', '', '9', '5', '2', '7', '']
print(re.findall(r'\d*', text)) #*表示0个或多个,结果为['', '', '', '', '', '178', '', '', '', '', '168', '', '', '', '', '123456', '', '', '', '', '9527', '']
print(re.findall(r'\d{4,}', text))#{}表示重复前面多少次,是个区间,该表示方法为大于4次,输出结果:['123456', '9527']

# leve4 - 组合level2

text = '麦叔电话是18812345678,他还有一个电话号码是18887654321,他爱好的数字是01234567891,他的座机是:0571-52152166'
print(re.findall(r"\d{3,4}-\d{7,8}",text)) #输出结果为:['0571-52152166'],区号匹配三位四位都可以,电话好匹配7位8位都行

# leve5 - 多种情况
#
# 要求:找出手机号码或者座机号码

text = '麦叔电话是18812345678,他还有一个电话号码是18887654321,他爱好的数字是01234567891,他的座机是:0571-52152166'
patter = "\d{3,4}-\d{7,8}|1\d{10}" #|表示都行
print(re.findall(patter,text))
#
# level6 - 限定位置
#
#要求:在句子开头的手机号码,或座机

text = '18812345678,他还有一个电话号码是18887654321,他爱好的数字是01234567891,他的座机是:0571-52152166'
parter = "^1\d{10}|\d{4}-\d{8}" #^以什么开头
print(re.findall(parter,text))


# level7 - 内部约束
#
# 要求:找出形如barbar, dardar的前后三个字母重复的字符串

text = 'barbar carcar harhel'
print(re.findall(r'(\w{3})(\1)', text)) #():表示一组一组的分好,\:表示引用。\1表示我要和前面括号中的一样(\2)表示和前面第二个人括号一样
#()分成两部分

2. 写正则表达式的步骤

如何写正则表达式呢?我总结了几个步骤。不管多复杂,基本上都百试不爽。

我们仍然以包含分机号码的座机电话号码为例,比如0571-88776655-9527,演示下面的步骤:

#需求:匹配分机号码
tex = "0571-88776655-9527.dfvgai;;sdbv;asdv;asv;iasvi;cav"
pater = "\d{4}-\d{8}-\d{4}"
result = re.findall(pater,tex)
print(result)

[^3-8] 表示取反的意思,除了3-8之间都可以

abc{8}:c重复8次;(abc){8}:abc重复8次

4. Python正则模块re的用法

python的re模块还比较简单,包括以下几个方法:

text = '麦叔电话是18812345678,他还有一个电话号码是18887654321,0581-52152166他爱好的数字是01234567891,他的座机是:0571-52152166'
it = re.finditer(r"(\d{4})-(\d{8})",text)
for m in it:
    print(m) #返回的是一个对象,返回一个迭代器
text = "aBc,dafaa Abc ABC"
result = re.sub(r"abc","***",text,flags=re.I) #输出结果:***,dafaa *** ***,前面是要匹配的目标,后面是匹配的内容
print(result)

标签:返回,正则表达式,text,系统,学习,re,print,findall
来源: https://www.cnblogs.com/yangzilaing/p/15799547.html