首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >具有正向先行的Python regex可选捕获组

具有正向先行的Python regex可选捕获组
EN

Stack Overflow用户
提问于 2018-10-24 01:48:20
回答 2查看 430关注 0票数 1

正在尝试查找特定的文件夹模式。我可以有一个简单的if语句,但现在我想知道,这可以在一个正则模式中完成吗?

文件夹:

代码语言:javascript
复制
name
name_a01
name_a02
..
name_a20

name_dontuse_a10 <不需要此模式

代码语言:javascript
复制
pattern = re.match(".*name(_a[0-9])?", dir)

上面的代码正确匹配,但它同时匹配namename_dontuse_a10

代码语言:javascript
复制
pattern.group(1)

为这两个文件夹返回None,所以这对我没有太大帮助。

我不能预测什么不需要的文件夹将被命名,但我想要基本名称的文件夹和任何name_a## folder。我认为我需要一个积极的前瞻,但不确定如何在可选的捕获组中使用它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-24 01:53:50

试着使用这个:

代码语言:javascript
复制
pattern = re.match(".*name(_a[0-9]*)?$", dir)

我只是添加了$以匹配字符串末尾的第一个下划线。我还添加了[0-9]*来匹配零个或多个数字。

现场示例:

https://regex101.com/r/MSldc6/2/

票数 1
EN

Stack Overflow用户

发布于 2018-10-24 02:07:13

最好的解决方案是首先从路径中提取文件名,这样就不必在正则表达式中处理它。normpath删除所有尾随的/basename提取文件名。因此,对于dir1/dir2/name/,您将获得name

代码语言:javascript
复制
import os, re

dir = ...
name = os.path.basename(os.path.normpath(dir))

pattern = re.match("name(_a\d+)?", name)

请注意,在您的原始解决方案中发生的情况是,.*匹配整个字符串,从而导致意外行为。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52955006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档