【问题标题】:.hgignore a folder except some subfolders.hgignore 一个文件夹,除了一些子文件夹
【发布时间】:2023-03-29 07:15:01
【问题描述】:

我想忽略一个文件夹,但保留其中的一些文件夹。 我试过这样的正则表达式匹配

syntax: regexp
^site/customer/\b(?!.*/data/.*).*

不幸的是,这不起作用。 我在answer 中读到,python 只进行固定宽度的负查找。

我想要的忽略是不可能的吗?

【问题讨论】:

    标签: regex mercurial tortoisehg regex-negation


    【解决方案1】:

    Python 正则表达式很酷

    Python 确实支持负 lookahead 查找 (?=.*foo)。但它不支持任意长度的负向后查找(?<=foo.*)。需要修复(?<=foo..)

    这意味着绝对有可能解决您的问题。

    问题

    您有以下正则表达式:/customer/(?!.*/data/.*).*
    让我们以输入示例/customer/data/name 为例。它匹配是有原因的。

    /customer/data/name
    ^^^^^^^^^^ -> /customer/ match !
              ^ (?!.*/data/.*) Let's check if there is no /data/ ahead
                 The problem is here, we've already matched "/"
                 so the regex only finds "data/name" instead of "/data/name"
              ^^^^^^^^^ .* match !
    

    修复你的正则表达式

    基本上我们只需要删除一个正斜杠,我们添加一个锚点^ 以确保它是字符串的开头,并确保我们使用\b 匹配customer^/customer\b(?!.*/data/).*

    Online demo

    【讨论】:

    • 嗨,感谢您的回答。我的文件夹包含一个用于不同客户的文件夹,该文件夹可以再次包含内部某处的数据文件夹。理论上我的正则表达式应该匹配那些。我尝试像您这样修复左侧:^site/customer/\b(?!.*/data/.*).* 但它也不起作用。
    • @Niksac 请提供regex101 演示。另请注意,我使用了^/customer\b(?!.*/data/).* 而不是^site/customer/\b(?!.*/data/.*).*。 (您已添加正斜杠)
    • @Niksac 你还在customer 之后添加/ ... sigh 尝试删除^。我不熟悉hg ...
    • 嘿哈姆扎。由于数据文件夹永远不是“客户”的直接子文件夹,因此添加“/”实际上是有益的,因为否则我不能再拥有以“客户”开头的文件夹了。我测试了“^site/customer/.*$”,它匹配所有文件,所以这部分规则应该是正确的。我想这是一个汞的事情
    • @Niksac 抱歉,我无法为您提供更多帮助。 See this answer,负前瞻绝对适用于 hg。
    猜你喜欢
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    相关资源
    最近更新 更多