栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python——正则表达式

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python——正则表达式

正则使用详讲——个人向:
一定要注意!正则内不能随便加空格 能不加就不加
{a,b}:表示从a到b的范围 a,b都包括 最好只用两个数字
()--代表一组
[]-- 匹配一个范围中的任意一个 或者具体几个 方括号内的 ^ 表示取反

import re
text = '名字: 136, 身高: 598,学号:17569, 136'
print(re.findall(r'136', text))
['136', '136']

~

print(re.findall(r'd', text))            #匹配单个数字 findall是查找全部
['1', '3', '6', '5', '9', '8', '1', '7', '5', '6', '9', '1', '3', '6']

~

'''
找出所有的数字 连着的 不用分开
d+: +号是修饰前面的正则的 表示有一个或多个 都需要匹配
d+: 意思就是 1、是数字 2、这个数字有一个或多个
'''
print(re.findall(r'd+', text))
['136', '598', '17569', '136']

~

'''
找出座机号码
分析得知 座机号码是: 3位或4位数字 + ‘-’ + 7位或8位数字
'''
text1 = '幸运数字:4564654546546,手机号:17516375901, 座机号码:0571-2855946'
print(re.findall(r'd{3,4}-d{5,7}', text1))
['0571-2855946']

~

'''
匹配多种情况 手机号 和 坐机号 '或者':在正则表达式里用  |  表示
手机号:1开头
'''
print(re.findall(r'd{3,4}-d{7,8}|1d{10}', text1))
['17516375901', '0571-2855946']

~

'''
限定匹配位置
手机号要么出现在最前面 要么出现在最后面
^ 放在正则前面 表示正则匹配开头 $放在后面 表示结尾匹配
只匹配出现在最前面的手机号 和 出现在最后面的座机号
'''
text2 = '17516375901幸运数字:4564654546546,手机号:17516375901,座机号码:0571-2855948 座机号码:0571-28559'
print(re.findall(r'^1d{9,11}|d{4}-d{5,7}$', text2))
['17516375901', '0571-28559']

~

'''
内部约束:
找到前三个字母与后三个字母相同的字符串 如:barbar  deadea
1 表示与前面的组一样
w 表示任意字符
有组--也就是正则有() 返回值 也是组的形式
'''
text3 = 'barvar, ssderder, dasdwaf, ketkets'
print(re.findall(r'(w{3})(1)', text3))
[('der', 'der'), ('ket', 'ket')]

~

'''
以251-2645468-235415151为例子

1、判断有几个子模式 :d-d-d   ---   三个
2、各子模式的字符是什么:d
3、各自模式如何重复d{3}.....
4、是否有外部限制 -- 位置限制
5、是否有内部制约 -- barbar
5、多种情况用 |
'''

text4 = 'assefb,asdas'
print(re.findall(r'a.+b', text4))
['assefb']

~

'''
重点:: 如果想找abc多次连续重复的需要(正则)(d){需要重复的次数-1}
'''
text5 = 'dabcabcabc, asdclaclaclaaswfg'
print(re.findall(r'(w{3})(1){2}', text5))
[('abc', 'abc'), ('cla', 'cla')]

~

'''
单词边界取值
b放在前面表示 单词的前边界 b()
下面是提取数字
'''
text6 = '1wan, 2wan, 3wan'
print(re.findall(r'bd', text6))
['1', '2', '3']

~

'''
?<=密码表示密码一定要出现在 :123之前
'''
text7 = 'dsadasdasda,密码:123'
print(re.findall(r'(?<=密码.)d+', text7))
['123']

~

'''
标记 flags=
'''
text8 = 'aba, Aba, ABA'
print(re.findall(r'abA', text8, flags=re.I))        #RE.I对大小写不铭感
m = re.finditer(r'abA', text8, flags=re.I)
for m in m:
    print(m)
['aba', 'Aba', 'ABA']

~

'''
查找:
search - 只返回一个 - match
match - 只返回一个 从头匹配 - match
findall - 返回全部
finditer - 一次返回一个的 match迭代器对象
match对象想要读值 需要.group -- group还可以分别取组
替换:
sub
subn - 替换完后 返回几个字符被替换掉了

分割
split
'''
text8 = 'aba, Aba, ABA'
m = re.search(r'aba', text8, flags=re.I)
print(m, m.group())



 aba

~

text1 = '幸运数字:4564654546546,手机号:17516375901, 座机号码:0571-2855946'
m = re.search(r'(d{4})-(d{7})', text1)
print(m.group(1))
0571

~

#替换
result = re.replace(r'1', '***', text1, flags=re.I)     #第二个参数是你要替换成什么
print(result)
幸运数字:4564654546546,手机号:***75***637590***, 座机号码:057***-2855946

~

result_subn = re.sub(r'1', '***', text1, flags=re.I)
print(result_subn)
幸运数字:4564654546546,手机号:***75***637590***, 座机号码:057***-2855946

~

#分割 -- 重点
'''
由于分隔符号不固定 所以需要利用正则表达式
split(r'表达分隔符的正则', 需要分割的文本)
s空格[,;/]三个符号任选一个s空格*0个或者多个
'''
text9 = 'fpp,bar ; baz'
print(re.split(r's*[,;/]s*', text9))
['fpp', 'bar', 'baz']

 

 

 

正则总览和例子: 

  

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/354834.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号