2013-07-03 147 views
0

我是一个初学者与python。我正在尝试使用具有以下代码的脚本作为其一部分。我有几个关于这段代码的问题。需要帮助理解这个python代码片段与re.compile()

当前工作目录有两个目录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 
    

感谢。

+3

从文档开始:http://docs.python.org/2/library/re.html –

回答

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

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

您最初的前缀和后缀(cpt..d\)的比赛:

  • 的文字文本"cpt"加一个任意字符(正则表达式匹配.一个字符,无论那是)。
  • 一个任意字符加上至少一个数字。因为在文字文本"cpt."(NOE逃脱\.那里)和1个或多个数字相匹配

    "cpt\.\d+" 
    

下面的模式将更为简明扼要符合您的目录。你不需要使用字符串连接来实现。

需要注意的是,如果你想利用命令行用户输入,你可能使用re.escape() function这些字符串逃过字符串中的正则表达式元字符。

根据你正在尝试做什么,你应该考虑使用正则表达式以及而不是

1

检查docs,但...

1:"cpt." + arg + ".\d+"做与ARG字符串连接。所以如果arg是“blah”,那么这将导致字符串"cpt.blah.\d+"re.compile然后将其编译成正则表达式。

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