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

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

作者: 吃栗子夫斯基波娃 | 来源:发表于2017-06-29 17:01 被阅读0次

废话不多说,先贴代码:

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

就酱,记录。

相关文章

  • Python--正则匹配

    正则表达式匹配规则 Python 的 re 模块 在 Python 中,我们可以使用内置的 re 模块来使用正则表...

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

    废话不多说,先贴代码: derivedDataPath = "/Users/dabao/Library/Devel...

  • python正则

    re模块操作 在Python中需要通过正则表达式对字符串进行匹配的时候,可以使用一个模块,名字为re re模块的使...

  • 小猪的Python学习之旅 —— 3.正则表达式

    re模块 Python中通过re模块使用正则表达式,该模块提供的几个常用方法: 1.匹配 re.match(pat...

  • 2018-03-30

    python 正则 re 模块常用方法re.match #从头匹配re.search #...

  • python re模块

    re模块 re是python内建模块,主要用于处理正则表达式,匹配字符串等工作。 使用正则表达式的步骤 导入re ...

  • 正则表达式

    1. re模块操作 在Python中需要通过正则表达式对字符串进行匹配的时候,可以使用一个模块,名字为re re....

  • 正则表达式

    Python中包含正则表达式的模块。 使用前先导入正则表达式模块: 语法: re.match 从头开始匹配re.s...

  • python正则案例

    在Python中需要通过正则表达式对字符串进行匹配的时候,可以使用一个模块,名字为re 1. re模块的使用过程 ...

  • Python高级第六天

    正则表达式(模式匹配) 一、标准库模块re Python3中使用re模块支持正则表达式(Regular Expre...

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/pfxvcxtx.html