gpt4 book ai didi

python - 如何在 .hgignore 中模拟语言补码运算符?

转载 作者:行者123 更新时间:2023-11-28 18:56:01 31 4
gpt4 key购买 nike

我有一个匹配一组文件名的 Python 正则表达式。如何更改它以便我可以在 Mercurial 的 .hgignore 文件中使用它来忽略匹配表达式的文件?

全文:我有一个很大的源代码树,到处都是 *.ml 文件。我想将它们放入一个新的存储库中。还有其他不太重要的文件太重而无法包含在存储库中。我正在尝试为 .hgignore 文件找到相应的表达式。

第一个观察:Python 没有常规语言补码运算符(据我所知,它只能补码一组字符)。 (顺便说一句,为什么?)

第二次观察:Python 中的以下正则表达式:

re.compile("^.*(?<!\.ml)$")

按预期工作:

abcabc - match  
abc.ml - no match
x/abcabc - match
x/abc.ml - no match

但是,当我在 .hgignore 文件中放入完全相同的表达式时,我得到了这个:

$ hg st --all  
? abc.ml
I .hgignore
I abcabc
I x/xabc
I x/xabc.ml

根据 .hgignore 联机帮助页,Mercurial 使用普通的 Python 正则表达式。那我怎么会得到不同的结果呢?Mercurial 怎么可能找到 x/xabc.ml 的匹配项?

有没有人知道缺少常规语言补语运算符的不那么丑陋的方法?

最佳答案

正则表达式依次应用于每个子目录组件以及文件名,而不是一次应用于整个相对路径。因此,如果我的存储库中有 a/b/c/d,则每个正则表达式都将应用于 a、a/b、a/b/c 以及 a/b/c/d。如果任何组件匹配,该文件将被忽略。 (你可以通过尝试 ^bar$ 和 bar/foo 来判断这是行为 - 你会看到 bar/foo 被忽略了。)

^.*(?<!\.ml)$忽略 x/xabc.ml,因为模式匹配 x(即子目录。)

这意味着没有正则表达式可以帮助您,因为您的模式必须匹配第一个子目录组件。

关于python - 如何在 .hgignore 中模拟语言补码运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1079342/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com