0

我想从字符串 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'

我该怎么做?

4

2 回答 2

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字符串中任意位置之后的一个或多个数字(贪婪地)。

于 2013-06-04T01:46:43.870 回答
1

您正在询问以 开头的匹配,region而您的输入以 开头query。尝试这个:

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

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

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

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

于 2013-06-04T01:44:08.830 回答