正则表达式匹配Ant路径

时间:2015-10-16 12:53:50

标签: python regex ant

我有一个简单的任务 - 我在两个字符串中给出了一个路径和一个Ant模式,我想知道路径是否适合模式。就是这样。

e.g。模式可能是

foo/*/bar/**.ext

然后会针对简单的true / false匹配测试不同的路径。

现在我正在使用fnmatch包,但这不能100%正确运行。它基本上将*合并到**并且会匹配太多文件。

我正在寻找Python或一般方法的解决方案,以生成允许我进行匹配的正则表达式。

1 个答案:

答案 0 :(得分:1)

我不能发誓这在每种情况下都是一个防弹解决方案,但你可以试着用这个来过滤路径中的每个敏感字符:

  • .,带有反斜杠点\.
  • 具有等效*
  • 的蚂蚁星[^\/]+
  • 具有正则表达式**
  • 的蚂蚁双星.*
  • 斜杠/使用\/进行转义(仅适用于类似unix的路径)
  • 带有单个字符?的问号\w(仅匹配[a-zA-Z0-9_]可能比关于文件名中允许的字符的操作系统规则更严格)

这是相关代码:

#!/usr/bin/python
import re

star = r"[^\/]+"
doubleStar = r".*"
slash = r"\/"
questionMark = r"\w"
dot = r"\."

antPath = "foo/*/bar/**.ex?"
expectedPath = r"foo\/[^\/]+\/bar\/.*\.ex\w"

# Apply transformation
output = antPath.replace(r"/", slash).replace(r".", dot)
output = re.sub(r"(?<!\*)\*(?!\*)", star, output)
output = output.replace(r"**", doubleStar)
output = output.replace(r"?", questionMark)

if (output == expectedPath):
    print "Success!"
else:
    print "Failure..."
print "filteredPath: ", output
print "expectedPath: ", expectedPath

在线试用here