需要帮助理解这个python代码片段与re.compile()

时间:2013-07-03 07:31:47

标签: python

我是python的初学者。我试图使用具有以下代码作为其一部分的脚本。关于此代码段,我有几个问题。

当前工作目录有两个目录cpt.133131313 /和cpt.38282382328 /。我给这两个目录为arg1和arg2。

  • "cpt." + arg + ".\d+到底发生了什么?

  • 什么应该arg以便if re.compile("cpt." + arg + ".\d+").search(f)返回true?

    allfiles = os.listdir(os.getcwd())
    cpts = []
    for arg in args:
        found = False
        for f in allfiles:
            if re.compile("cpt." + arg + ".\d+").search(f):
                found = True
                cpts.append(f)
                break
        if not found:
            print "missing checkpoint: ", arg
    

感谢。

2 个答案:

答案 0 :(得分:1)

检查docs,但是......

1:"cpt." + arg + ".\d+"正在与arg进行字符串连接。因此,如果arg是“blah”,那么这将导致字符串"cpt.blah.\d+"re.compile然后将其编译为正则表达式。

2:如果search()与正在编译的正则表达式匹配,f将返回True。

答案 1 :(得分:1)

  • "cpt." + arg + ".\d+"只是连接字符串。如果arg"cpt.133131313",则结果为"cpt.cpt.133131313.\d+"

  • arg可以是任何匹配最多7位数或任意字符的模式。如果arg字符串,则您的模式会匹配,但"......."也是如此。

您的初始前缀和后缀(cpt..d\)匹配:

  • 文字文本"cpt"加上一个任意字符(正则表达式中的.匹配一个字符,无论可能是什么)。
  • 一个任意字符加上至少一个数字。

以下模式将更简洁地匹配您的目录:

"cpt\.\d+"

因为它匹配文字文本"cpt."(没有转义\.)和1位或更多位数。您不需要使用字符串连接来实现此目的。

请注意,如果您想从命令行获取用户输入,那么可能希望在这些字符串上使用re.escape() function来转义字符串中的任何正则表达式元字符。< / p>

根据您的尝试,您应该考虑使用正则表达式。