正则中的那点事

\b是匹配一个单词边界
\B是匹配一个非单词边界

你问我什么是边界?其实我也是自己一个一个试出来的,哈哈哈哈哈

举个例子:

1.print(re.search(r"er\b",“never”)) er是never单词的后边界,所以就可以匹配到最后的er,匹配成功;

2.再来看另一个:
print(re.search(r"er\b",“nerve”)) er在该单词的中间,并没有在边界,所以返回None,匹配不到;

3.如果\b在前面,那么就意味着er需要在单词的开头("\ber",“erne”)匹配到了开头的er,匹配成功;

同理,\B就是匹配没在边的,但是也有前后之分,举个例子吧:

1.“er\B”,“abcabcer”,那么er在单词的结尾,因此属于单词边界,但是其他位置没有er,所以匹配不到了,因此返回None。

2.“er\B”,“eraaabbccdder”,这个是开头有一个er,结尾也有一个,但是\B在结尾,所以开头边界的er还是可以被匹配到。

3."\Ber\B",“eraaabbccdder”,这个就都匹配不到了。

4."\Ber\B",“eraaaerccdder”,这个的话中间的er会被匹配到,因为没在边界。

哦哦,对了,跟你们说啊,当有多个条件都符合的时候,会自动匹配前面的,贪婪匹配在多个匹配时才会被自动使用。(?是匹配0或1次,代表着非贪婪;*是匹配0或多次,代表着贪婪,尽可能多的匹配)

-------------------------------------------------------多次匹配------------------------------------------------------
x?匹配0或1次x(非贪婪)
x*匹配至少0次x(贪婪)
x+匹配至少1次x(贪婪)
x{n}匹配确定的n个x(n是非负整数)
x{n, }匹配至少n个x(贪婪)
x{n,m}匹配至少n个,至多m个x(n<=m)
x|y x或y

我发现,你需要把你匹配到的部分给用小括号括起来,比如
(r"((s|S)unck)",“sunck–Sunck”),输出结果就是[(‘sunck’,‘s’),(‘Sunck’,‘S’)]
分组的话要注意,顺序是从外面的括号到里面的括号这样的顺序,别忘了顺序!!!

------------------------------------------特殊的------------------------------------------------------
*? +? ??
加个?就是非贪婪了,匹配最少的个数,比如:
你要是用.*就是除了换行符以外所有的,这样会从头匹配到尾,因为贪婪嘛,尽可能多的匹配不就从头到尾了啊,但是你要是在.后面加个?变成.*?那么就会把半中间也符合的匹配到,(r"sunck.?man",“sunck is a good man! sunck is a nice man! sunck is a very handsome man”),输出结果就是[“sunck is a good man”,“sunck is a nice man”,“sunck is a very handsome man”],你看,是不是分成了三段,要是想要整体的话就把?给去掉就OK了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值