python-正则表达式

#正则表达式是用来匹配字符串的
#字符串提供的方法是完全匹配,正则表达式提供的是模糊匹配

import re

print(re.findall('alex','12345alexhelloworldalex9876'))#['alex', 'alex']

ret = re.findall('w\w{2}l','hello world')
print(ret) #['worl']

#正则表达式中的元字符
# .  ^  $  *  +  ?  { }  []  | () \

# .可以匹配任何字符 只能代指一个字符,除了换行符
ret = re.findall('w..l','hello world')
print(ret) #['worl']

# .不能匹配换行符  .也叫通配符
ret = re.findall('w.l','hello w\nld')
print(ret)  #[]

# ^  只从开始进行匹配
ret = re.findall('^h...o','hello world')
print(ret) #['hello']

# $  只从结尾进行匹配
ret = re.findall('a..x$','dkjalfsjdalex')
print(ret) #['alex']

# * 重复匹配  *代表0到多次 范围[0,无穷]
ret = re.findall('a.*li','hhjhkjalexlikjdkfj')
print(ret) #['alexli']

# 贪婪模式
ret =re.findall('ba*','jhdjhdshbaaaaaa')
print(ret)#['baaaaaa']

# + 重复匹配   代表1到多次 [1,无穷]
ret = re.findall('a+b','aaaabhghf')
print(ret) #['aaaab']

# ? [0,1] 零次或者1次
ret = re.findall('a?b','aaaaabhgabfb')
print(ret) # ['ab', 'ab', 'b']

# {} 自己在里面定义次数
ret = re.findall('a{5}b','aaaaabcdfhgl')
print(ret) #['aaaaab']

#贪婪匹配 就按照最大匹配个数进行匹配
ret = re.findall('a{1,3}b','aaaab')
print(ret) #['aaab']

#{1,}  等价于 +号  一到正无穷
#默认是贪婪匹配   可以更改为非贪婪匹配

#[] 字符集包括 普通字符 + 元字符
ret = re.findall('a[c,d]x','acx')
print(ret) #[acx]
ret = re.findall('a[c,d]x','adx')
print(ret) #[adx]

ret = re.findall('a[c,d]x','acdx')#匹配不到
print(ret) #[]

ret = re.findall('[a-z]','acx')
print(ret) #['a', 'c', 'x']

#[]字符集:如果是元字符则取消元字符的特殊功能(\ ^ - 这三个例外)
ret = re.findall('[w,*]','awcx*')
print(ret) #['w', '*']

# ^放在[]里面 是取反的意思
ret = re.findall('[^t]','iu12tyAius')
print(ret) #['i', 'u', '1', '2', 'y', 'A', 'i', 'u', 's']
# 非4 或者非5 ^[(4,5)]
ret = re.findall('[^4,5]','iu12ty4Ai5us')
print(ret) #['i', 'u', '1', '2', 't', 'y', 'A', 'i', 'u', 's']

# 下面是\ 的功能
# \  功能:1、 反斜杠后边跟元字符去除特殊功能
#         2、 反斜杠后边跟普通字符实现特殊功能(跟一部分字符)

# \d  匹配任何十进制数:它相当于类[0-9]
# \D  匹配任何非数字字符 它相当于[^0-9]
# \s  匹配任何空白字符  它相当于[\t\n\r\f\v]
# \S  匹配任何非空白字符  它相当于[^\t\n\r\f\v]
# \w  匹配任何字母数字字符  它相当于[a-zA-Z0-9_]
# \W  匹配任何非字母数字字符  它相当于[^a-zA-Z0-9_]
# \b  匹配一个特殊字符边界,也就是指单词和空格间的位置

# 这是第二个功能
print(re.findall('\d{11}','15098828721')) #['15098828721']
print(re.findall('\w','fak asd')) #['f', 'a', 'k', 'a', 's', 'd']
print(re.findall(r'I\b','hello,I am a LIST')) #['I']

#第一个功能
# search 匹配出第一个满足条件的结果
ret = re.search('sb','sbfjskdsb')
print(ret)
print(ret.group()) #sb

print(re.search('a.','agj').group()) #ag
#
print(re.search('a\.','a.gj').group()) #a.
print(re.search('a\+','a+gj').group()) #a+
# \\
# 过程为先经过python解释器,在经过re模块,这种\要经过两层转义
print(re.findall(r'D\\c','adhfD\c')) #['D\\c']
print(re.findall('D\\\\c','adhfD\c')) #['D\\c']

m = re.search(r'\bblow','blow')
print(m.group()) #blow

# | 是或的意思

# ()  用来做分组的
print(re.search('(as)+','sdjkfasas').group()) #asas
# 这种或的形式 是先找到谁就返回谁 立即结束
print(re.search('(as)|3','sd3jkfasas').group()) #3

#分组  ?P<NAME> 这是格式
ret = re.search('(?P<id>\d{3})/(?P<name>\w{3})','weeew34ttt123/ooo')
print(ret)
print(ret.group())
print(ret.group('id'))
print(ret.group('name'))

#正则表达式的方法 六个
# 1 findall()  所有的结果都返回到一个列表里
# 2 search()   返回一个对象(object) 可以调用group查看内容  返回匹配到的第一个对象
# 3 match()    只在字符串开始匹配,返回一个对象(object) 可以调用group查看内容
ret = re.match('asd','helloasd')
print(ret)
ret = re.match('asd','asdhelloasd')
print(ret)
print(ret.group())
# 4 split()
# 先通过j分,后通过s分开
ret = re.split('[j,s]','djksal')
print(ret)
# 5 sub() 替换
ret = re.sub('a..x','sb','hfjasalexdhf')
print(ret)

# 6 compile()
obj = re.compile('\.com') #编译成一个正则表达式对象
print(obj.findall('www.baidu.com'))

print(re.findall('(3)|(as)','sd3jkfasas')) #[('3', ''), ('', 'as'), ('', 'as')]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值