说实话这一节写的有点水group和groups 还是有区别的前面教程都是group你这里一上来就是groups
..错别字能少点就更好了
这玩意真的难,即便知道了,自己用也不会用
肖凯文kevin 发表于 2016-1-31 12:40
re.search(r'.*[.](?!bat).*$','kevin.11bat')
re.search(r'.*[.](?!bat$).*$','kevin.11bat')
为什么我 ...
我也觉得没意义 因为后面还有东西。。
本帖最后由 ArmandXiao 于 2020-2-25 10:14 编辑
抱歉 我刚刚的回答应该是错的。 这两个是有区别的
print(re.search(r'.*[.](?!bat).*$','kevin.bater'))
print(re.search(r'.*[.](?!bat$).*$','kevin.bater'))
你可以尝试一下这两个代码,他们是有区别的。
第一个返回 None
第二个返回 <_sre.SRE_Match object; span=(0, 11), match='kevin.bater'>
而你通过分析这个正则 你也可以发现 [.](?!bat$) 匹配 bat前面只能有一个 .,不能有多的字符。
否定的是这个意思:“这跟前向肯定断言相反(不匹配则表示成功,匹配表示失败)”
匹配则失败 你可以看看 第一个 因为 bat 不是最后一个 匹配了 所以失败了 返回 None
而第二个 因为bat不是最后一个 不匹配 所以成功了 返回object
或者用你的 bat前面加了俩数字
你可以把代码改成
print(re.search(r'.*[.]\d\d(?!bat).*$','kevin.11bater'))
print(re.search(r'.*[.]\d\d(?!bat$).*$','kevin.11bater'))
你会发现 第一个返回了 none 第二个返回了 object 原因是一样的 因为 bat不是在最后一个 第一个缺了 $ 符号!!
加油大佬们
开始晕了~
厉害啊
排除后缀名这个真的很叼
前向断言确实有用 ?:非捕获组 ?P<name>命名组?=前向肯定断言?!前项否定断言
{:10_243:}
越往后越难一些