2016-02-04 86 views
-1

我使用regex101.com來測試正則表達式中的字符串。Python re不同的結果

我在網站上使用的代碼是這樣的:

Regular expression = nv[_](.*)[_] 

Test string http://www.imdb.com/chart/top?ref_=nv_mv_250_6 

在我的Python,當我使用建議的代碼,而不必mv_250我已經nv_mv_250_

的由網站推薦的代碼是這個

import re 
p = re.compile(ur'nv[_](.*)[_]') 
test_str = u"http://www.imdb.com/chart/top?ref_=nv_mv_250_6" 

re.search(p, test_str) 

爲什麼結果不一樣?

+2

該值在'.group(1)'中。 –

回答

1

您需要的值是submatch,即第一個捕獲組的內容。訪問它通過.group(1)

import re 
p = re.compile(ur'nv[_](.*)[_]') 
test_str = u"http://www.imdb.com/chart/top?ref_=nv_mv_250_6" 
m = re.search(p, test_str) 
if m: 
    print(m.group(1)) 

IDEONE demo

而且,這是一個好主意,如果比賽在訪問該子匹配發現之前先檢查一下。

或者,您可以使用re.findall返回結果列表,因爲它只返回子匹配(=捕獲的子字符串)。

+0

謝謝,我會接受答案 – GGA

0

使用non-capturing groupfindall()

import re 
p = re.compile('(?:nv_)(.*)(?:_)') 
test_str = u"http://www.imdb.com/chart/top?ref_=nv_mv_250_6" 

for item in re.findall(p, test_str): 
    print item