正则表达式从树输出中找到重复的文件名

时间:2017-11-29 22:42:32

标签: python regex sublimetext

请协助从树输出中查找重复的文件名。我在SublimeText中使用正则表达式找不到重复的文件名时遇到了麻烦。我正在搜索的文件来自发送到文本文件的tree命令的输出:

src/test/resources
|-- WPCDPS
|   `-- RiskIndicatorsEvaluationRuleTest.feature
|-- Accelerated.feature
|-- AcceptedAFS.feature
|-- AgeValidationRemoval.feature
|-- Anxiety.feature
|-- CheckDisabledOccupation.feature
|-- Extended.feature
|-- Financal.feature
|-- Fainancial.feature
|-- FloridaSpecific.feature
|-- Hypertension.feature
|-- LifeForceOrPending.feature
|-- LifestyleInformation.feature
|-- MinValue.feature
|-- Occupations
|   |-- OccupationTranslation.feature
|   |-- OccupationsWithPreConditions.feature
|   |-- Accelerated.feature
|   `-- OccupationsWithoutPreConditions.feature
|-- Florida.feature

我尝试使用(?m)(\bAccelerated\.feature\b)(?=[\s\|\-\n]*\1)的不同组合但没有成功。

1 个答案:

答案 0 :(得分:3)

代码

See regex in use here

((?<= )[\w.]+$)(?=[\s\S]*(?<= )(\1)$)

regex demo here

中看到s修饰符(单行)
((?<= )[\w.]+$)(?=.*(?<= )(\1)$)

注意:由于某种原因,上面的模式(启用单行模式)会导致regex101超时。我已经在代码生成器下测试了代码,它的工作正常(doesn't timeout when used in code)。

说明

  • ((?<= )[\w.]+$)将以下内容捕获到捕获组1中
    • (?<= )确保空间前面的正面观察
    • [\w.]+匹配任何单词字符或点字符一次或多次
    • $断言行尾的位置
  • (?=[\s\S]*(?<= )(\1)$)确定后续匹配的正向前瞻
    • [\s\S]*任意次数的任何角色。 (我们不在这里使用点,因为它不会与换行符匹配。如果您打开单行标志,则可以用[\s\S]替换.,这会强制. 1}}也匹配换行符)
    • (?<= )确保空间前面的正面观察
    • (\1)将以下内容捕获到捕获组2中
      • \1匹配与捕获组1
      • 最近匹配的文本相同的文本
    • $断言行尾的位置

在外行人的术语中,如果它在一个空格之后和行尾之前匹配整个文件名。然后它展望未来找到具有相同规则的副本(前一个空格,后一行结束)。