【发布时间】:2012-12-02 01:12:36
【问题描述】:
任务:
- 给定:图像文件名列表
- 待办事项:创建一个文件名不包含单词“thumb”的新列表 - 即仅针对非缩略图图像(使用 PIL - Python Imaging Library)。
我试过r".*(?!thumb).*",但失败了。
我找到了解决方案(在 stackoverflow 上),在正则表达式前面加上 ^ 并将 .* 放入否定的前瞻中:r"^(?!.*thumb).*",现在可以使用了。
问题是,我想了解为什么我的第一个解决方案不起作用,但我没有。 由于正则表达式足够复杂,我真的很想了解它们。
我所理解的是^ 告诉解析器以下条件匹配字符串的开头。但是(不工作)第一个示例中的.* 不是也从字符串的开头开始吗?
我认为它会从字符串的开头开始,并在到达“拇指”之前搜索尽可能多的字符。如果是这样,它将返回不匹配。
有人能解释一下为什么r".*(?!thumb).*" 不起作用但r"^(?!.*thumb).*" 起作用吗?
谢谢!
【问题讨论】:
-
Ummm - “不包含 word 拇指” - 强调我的...否则,为什么要使用正则表达式?
-
虽然正则表达式的使用不适用于这项任务(可能是家庭作业?),但最后一个问题仍然存在。
-
嗨,乔恩,感谢您的快速回复。我使用了正则表达式,因为我开始使用正则表达式将路径分解为目录和文件名。我是 Python 新手,在尝试处理这些任务时,我偶然发现了正则表达式。由于我是 Python 新手,我可能不知道其他(更简单的?)解决方案。你能解释一下对“词”的强调吗? 'Word' 为 16 位整数?
-
好的,谢谢mmgp,得到了关于它为什么不适用的评论(任务:创建列表...),我真正的问题:如何在Python 中的正则表达式?
-
正如@mmgp 提到的,我仍然想知道,为什么第一个正则表达式示例不起作用而第二个示例起作用。
标签: python regex assertion lookahead