2016-02-04 66 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