废话不多说,先贴代码:
derivedDataPath = "/Users/dabao/Library/Developer/Xcode/DerivedData"
allfile = os.listdir(derivedDataPath)
baiduBoxAppDir = ""
pattern = r'BaiduBoxApp-.*'
for one in allfile:
print re.search(pattern, one)
if(re.search(pattern, one)):
print "Match!"
baiduBoxAppDir = one
break
else:
print "Not Match: "+one
print "BaiduBoxAppDir = "+baiduBoxAppDir
然后文件夹里明明有一个“BaiduBoxApp-后面一堆字母”的文件夹,就是匹配不出来。
原因如下:
这里使用的是re.search,re.search 扫描整个字符串并返回第一个成功的匹配。
re还有一个方法是re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
这里我写的pattern = r'BaiduBoxApp-.*',是针对match写的,如果方法换成match,那会匹配成功,但如果是search,后面那个.*就要去掉才能匹配到,因为.*本意是匹配任意字符0或多次,也就是随便是啥,但是search本身就是局部匹配,也就是在一串字符串中寻找子串,那前提必须是这个子串至少长度是确定的,不然怎么局部匹配?哪怕是留着.表示任意一个字符,也是可以匹配到的。
就酱,记录。
网友评论