lbf4325 发表于 2019-11-29 11:35:51

说实话这一节写的有点水group和groups 还是有区别的前面教程都是group你这里一上来就是groups

zhqzhqzhq 发表于 2020-1-5 12:12:06

..错别字能少点就更好了

ArmandXiao 发表于 2020-2-24 21:05:02

这玩意真的难,即便知道了,自己用也不会用

ArmandXiao 发表于 2020-2-25 09:52:33

肖凯文kevin 发表于 2016-1-31 12:40
re.search(r'.*[.](?!bat).*$','kevin.11bat')
re.search(r'.*[.](?!bat$).*$','kevin.11bat')
为什么我 ...

我也觉得没意义 因为后面还有东西。。

ArmandXiao 发表于 2020-2-25 10:10:35

本帖最后由 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不是在最后一个 第一个缺了 $ 符号!!
加油大佬们

1815702237 发表于 2020-4-22 14:45:03

开始晕了~

我是新小白 发表于 2020-6-6 14:18:50

厉害啊

qq13700416415 发表于 2020-8-14 11:05:03

排除后缀名这个真的很叼

SKY126 发表于 2021-5-10 08:58:41

前向断言确实有用   ?:非捕获组    ?P<name>命名组?=前向肯定断言?!前项否定断言

天堂悲歌 发表于 2022-3-13 22:22:09

{:10_243:}

hveagle 发表于 2022-6-15 18:31:30

越往后越难一些
页: 1 2 [3]
查看完整版本: Python3 如何优雅地使用正则表达式(详解五)