0

我是python的初学者。我正在尝试使用包含以下代码的脚本。我有几个关于这个代码片段的问题。

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

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

  • 什么应该是 arg 以使if re.compile("cpt." + arg + ".\d+").search(f)返回为真?

    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
    

谢谢。

4

2 回答 2

1

检查文档,但是...

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

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

于 2013-07-03T07:38:36.393 回答
1
  • "cpt." + arg + ".\d+"仅连接字符串。如果arg"cpt.133131313",那么结果是"cpt.cpt.133131313.\d+"

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

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

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

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

"cpt\.\d+"

因为这与文字文本"cpt."(没有转义的文本\.)和 1 个或多个数字相匹配。您不需要使用字符串连接来实现这一点。

请注意,如果您想从命令行获取用户输入,您可能希望对这些字符串使用该re.escape()函数来转义字符串中的任何正则表达式元字符。

根据您要执行的操作,您可能也应该考虑使用正则表达式。

于 2013-07-03T07:40:17.307 回答