我正在使用regex101.com来测试正则表达式中的字符串。
我在网站上使用的代码是:
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)
为什么结果不同?
答案 0 :(得分:1)
您需要的值是子匹配,即第一个捕获组的内容。通过 <SharePoint:SPNavigationManager
id="QuickLaunchNavigationManager"
runat="server"
QuickLaunchControlId="V4QuickLaunchMenu"
ContainedControl="QuickLaunch"
EnableViewState="false"
>
<SharePoint:DelegateControl runat="server"
ControlId="QuickLaunchDataSource">
<Template_Controls>
<asp:SiteMapDataSource
SiteMapProvider="SPNavigationProvider"
ShowStartingNode="False"
id="QuickLaunchSiteMap"
StartingNodeUrl="sid:1025"
runat="server"
/>
</Template_Controls>
</SharePoint:DelegateControl>
<SharePoint:AspMenu
id="V4QuickLaunchMenu"
runat="server"
EnableViewState="false"
DataSourceId="QuickLaunchSiteMap"
UseSimpleRendering="true"
Orientation="Vertical"
StaticDisplayLevels="3"
AdjustForShowStartingNode="true"
MaximumDynamicDisplayLevels="0"
SkipLinkText=""
/>
</SharePoint:SPNavigationManager>
:
.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))
返回结果列表,因为它只返回子匹配(=捕获的子串)。
答案 1 :(得分:0)
non-capturing group
与findall()
一起使用。
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