鱼C论坛

 找回密码
 立即注册
查看: 2413|回复: 1

关于正则表达式的前向否定断言有以下不明,望高手指教!

[复制链接]
发表于 2017-2-1 08:07:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
p=re.compile(r'((?!bat$|exe$).*$)', re.M)  #为什么这样写,前向否定断言就不起作用了呢?
A=p.findall('123.txt\n85.exe\ng9.bat\nasdfi.xyz\nefd')

>>> A
['123.txt', '', '85.exe', '', 'g9.bat', '', 'asdfi.xyz', '', 'efd', '']


p=re.compile(r'(\w+[.](?!bat$|exe$).*$)', re.M)   #这个就没有问题,但本意是“nefd”也要摘出来的。
A=p.findall('123.txt\n85.exe\ng9.bat\nasdfi.xyz\nefd')
>>> A
['123.txt', 'asdfi.xyz']


另,(?!bat$|exe$)中间为什么要用或“|”,否定不是应该用与“&”吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-1 09:34:16 | 显示全部楼层
>>> import re
>>> s='123.txt\n85.exe\ng9.bat\nasdfi.xyz\nefd'
>>> p=re.compile(r'^(?!.*\.(?:bat|exe)).+', re.M)
>>> p.findall(s)
['123.txt', 'asdfi.xyz', 'efd']
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-6 12:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表