python的re模块在使用正则匹配时,一个*引起的bug

废话不多说,先贴代码:

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本身就是局部匹配,也就是在一串字符串中寻找子串,那前提必须是这个子串至少长度是确定的,不然怎么局部匹配?哪怕是留着.表示任意一个字符,也是可以匹配到的。

就酱,记录。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • re模块手册 本模块提供了和Perl里的正则表达式类似的功能,不关是正则表达式本身还是被搜索的字符串,都可以...
    喜欢吃栗子阅读 9,523评论 0 13
  • re模块 开始使用re Python通过re模块提供对正则表达式的支持。使用re的一般步骤是先将正则表达式的字符串...
    Alex陌阅读 5,124评论 0 0
  • 本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例...
    Python程序媛阅读 5,202评论 0 22
  • 多年前,每逢小镇古会,都会唱大戏放电影 ,庆祝这千百年来关中地区流传下来的民俗 。方圆十几里的父老乡亲都会在这几天...
    王宁子阅读 3,644评论 13 7
  • 曾经迷恋过这么一句话,找一个你爱的人,不如找一个爱你的人,找一个爱你的人不如找一个懂你的人。 一个...
    北方_79d3阅读 3,196评论 1 0

友情链接更多精彩内容