2014-02-24 58 views
2

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

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

可惜,这是行不通的。 我在这answer中读到python只能进行固定宽度的负向查找。

我希望忽略不可能吗?

回答

0

Python的正则表达式是酷

Python做支持负先行查找(?=.*foo)。但它不支持任意长度的负向lookbehind查找(?<=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

+0

您好,感谢您的回答。 我的文件夹包含不同客户的文件夹,这些文件夹可以再次包含里面的数据文件夹。理论上我的正则表达式应该匹配那些。 我试图修复左侧,就像你这样做: ^ site/customer/\ b(?!。*/data /.*).* 但它也不起作用。 – Niksac

+0

@Niksac请提供[regex101](http://regex101.com)演示。另请注意,我使用了'^/customer \ b(?!。*/data /)。*'而不是'^ site/customer/\ b(?!。*/data /.*).*'。 (你已经添加了正斜杠) – HamZa

+0

正则表达式工程http://regex101.com/r/pG9mV1但hg仍然忽略所有文件 – Niksac

相关问题