我是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
感谢。
答案 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>
根据您的尝试,您应该考虑不使用正则表达式。