python正则表达式提取模式

时间:2013-06-04 01:41:55

标签: regex python-2.7

我想从字符串query = regionID%3D4699183& c = 1中提取数字4699183,但它不起作用:

>>> import re
>>> string = 'query=regionID%3D4699183&c=1'
>>> string = re.sub("^(regionID%3D\d+)", "", string)
>>> string
'query=regionID%3D4699183&c=1'

我该怎么做?

2 个答案:

答案 0 :(得分:2)

^(regionID%3D\d+)在字符串的开头匹配regionID%3D\d+,这不是您提供的实际字符串中的位置。即使它按照你的预期工作,你也只是删除整个东西,这显然不是你想要的。

请改为尝试:

>>> import re
>>> s = 'query=regionID%3D4699183&c=1'
>>> m = re.search(r'regionID%3D(\d+)', s)
>>> m.group(1)
'4699183'

这使用一个捕获组来匹配字符串中regionID%3D之后的一个或多个数字(贪婪)。

答案 1 :(得分:1)

当您的输入以region开头时,您要求以query开头的匹配项。试试这个:

string = re.sub("^.*regionID%3D(\d+).*", r'\1', string)

也可以在不使用正则表达式的情况下执行此操作,但如果您要测试其他类型的字符串,则此方法可能会失败:

string = string.split('%3D')[1].split('&')[0]

或者您可以按照Cairnarvon的建议使用re.seach

相关问题