正则表达式小结——Python--(),[],{},?:,?=,?!

1…
()是为了提取字符串,()是一一对应的关系,每一个()都相应匹配一组关系,比如:(?😦?:3[0-5]?\d).),所捕获的可以为35.也就是3(匹配一个0-5之间的数).(.匹配一个.)。
同时需要注意的是()内的内容表示的是一个表达式,比如(abcd){1,2}匹配的是abcd这四个1到2次,去掉之后匹配的仅仅指的是d。
2.

(?:)表示非捕获分组,()表示捕获分组,具体有啥个区别呢,我看着是说前者不保存,后者保存,而且捕获分组的是分开的元组,确实不大好理解,用起来也很是困难,所以我用的时候一般都是用非捕获,使用时显示的也很全面,在爬取网址的时候非常方便(看个人吧,除了个别时候,你问我个别时候是啥时候?噗,我咋知道,我就是个小憨憨)

import re
str1 = "1052090@qq.comwww@163.com"
a = re.findall(r"\w+@(qq|163|126)(\.com)",str1)
print(a)
b = re.findall(r"\w+@(?:qq|163|126)\.com",str1)
print(b)
c = re.findall(r"\w+@(qq|163|126)\.com",str1)
print(c)
d = re.findall(r"\w+@(?:qq|163|126)(\.com)",str1)
print(d)
e = re.findall(r"\w+@(?:qq|163|126)(?:\.com)",str1)
'''
[('qq', '.com'), ('163', '.com')]
['1052090@qq.com', 'www@163.com']
['qq', '163']
['.com', '.com']
['1052090@qq.com', 'www@163.com']
'''

其中b相当于匹配的是网址,而d匹配的是.com,只有其里面加入?:才与b相同。也就是说一个小括号里面?:才起作用,所以说会看见很多类似于这样的(?:(?:http:\/\/)|(?:https:\/\/)),也就是匹配了http|https。
3.

[]一般是定义匹配的字符范围,也就是[a-zA-Z0-9]这种匹配字母和数字,[0-5]匹配0-5之间的数,若没有说明的话只能匹配一次。
4.

{}则一般是用来匹配的长度,就像 .{1,5} 的意思是(那个**.** 看见没有)匹配任意字符1到5个,多了就拆分成元组。

pattern = re.compile(r".{1,5}")
strs = '2dwdsaf34fscdsew23232d'
result = pattern.findall(strs)

print(result)
'''
['2dwds', 'af34f', 'scdse', 'w2323', '2d']
'''

?=代表着一个条件,并非是匹配的内容。正向肯定预查,预查预查,预先查看的意思嘛,例子如下:

pattern = re.compile(r"\\+\w.+(?=yes)")

strs = 'do you know \i love you yes'
result = pattern.findall(strs)
print(result)
'''
['\\i love you ']
'''

确定后面有yes之后才能输出匹配到的,否则输出为空。(注:预查不消耗字符)
6.
?!指正向否定预查,与?=理解相反,只要后面不是相对应的表达式时才可以匹配

pattern = re.compile(r"\w.(?!yo)")
strs = 'doyos'
result = pattern.findall(strs)
print(result)
'''
['oy', 'os']
'''
pattern = re.compile(r"\w.(?=yo)")
strs = 'doyos'
result = pattern.findall(strs)
print(result)
#['do']
#3
pattern = re.compile(r"\w+\s+(?!yo)")
strs = 'do qwefwefqwyos'
result = pattern.findall(strs)
print(result)
#4
pattern = re.compile(r"\w+\s+\w+(?!yo)")
strs = 'do qwefwefqwyos'
result = pattern.findall(strs)
print(result)

想了个比较容易理解的方式,先是匹配的是do,yo,发现yo有过设要求,所以不能被匹配到,所以匹配出oy,os。

话说真的挺贪的,第三个里面空格后面匹配到不是yo开始返回,然后再加一个\w后它会尽量避免不匹配,哪怕要全匹配上。(真细啊)

要注意的是不同语言原理上虽说是一样的,但是很多小地方是不同的,比如javascipt,php中/g/i分别为全文查找和忽略大小写的作用,但在Python中并没有特殊含义,推荐的链接里面就有那个表,挺全的(而且这个链接可是收藏比点赞还多的哦!)

推荐一个小白学习的小链接,里面的题很适合新手观看,最后面还有可查的表

(end:如果有不对的地方请给位大佬们指正,如果帮助到你请给我点个zhan,heihei)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Love And Program

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值