2016-11-22 171 views
0

进口重,urllib的正则表达式的问题,文件扩展名的Python 2.7

def get_files(page): 
    a = urllib.urlopen(page) 
    b = a.read() 
    c = re.findall("([a-zA-Z0-9]+\.{1}(jpg|bmp|docx|gif))",b) 
    return c 
def main(): 
    print get_files("http://www.soc.napier.ac.uk/~40001507/CSN08115/cw_webpage/index.html") 

if __name__ == "__main__": 
    main() 

后,我跑了这个代码,我与它的正则表达式的问题,因此,答案是这样的:

[('clown.gif', 'gif'), ('sleeper.jpg', 'jpg'), ('StarWarsReview.docx', 'docx'), ('wargames.jpg', 'jpg'), ('nothingtoseehere.docx', 'docx'), ('starwars.jpg', 'jpg'), ('logo.jpg', 'jpg'), ('certified.jpg', 'jpg'), ('clown.gif', 'gif'), ('essays.gif', 'gif'), ('big.jpg', 'jpg'), ('Doc100.docx', 'docx'), ('FavRomComs.docx', 'docx'), ('python.bmp', 'bmp'), ('dingbat.jpg', 'jpg')] 

我不希望结果如此('clown.gif', 'gif')我想要的全部是['clown.gif','sleeper.jpg']

有没有办法做到这一点?并得到红色的元组?

回答

1

你只需要将你的群组变成a non-capturing group

def get_files(page): 
    a = urllib.urlopen(page) 
    b = a.read() 
    c = re.findall("([a-zA-Z0-9]+\.{1}(?:jpg|bmp|docx|gif))", b) 
+0

非常感谢。这很有帮助 – ibr2

0

你正在做的延长双重捕捉,尝试用下面的正则表达式,?:意味着非捕获组

re.findall("([a-zA-Z0-9]+\.{1}(?:jpg|bmp|docx|gif))", b) 

我简化您的正则表达式以下时,{1}似乎是多余的,并使用\w\d为字数组

re.findall("([\w\d]+\.(?:jpg|bmp|docx|gif))", b) 
+0

我看到你减少了冗余,没有它们就可以工作。谢谢 – ibr2