Python - 提取重要的字符串信息

时间:2011-03-06 13:08:21

标签: python string

我有以下字符串

http://example.com/variable/controller/id32434242423423234?param1=321&param2=4324342

如何以最佳方式提取id值,在本例中为 - 32434242423423234

Regardz, Mladjo

4 个答案:

答案 0 :(得分:8)

您可以使用regular expression,例如:

import re

s = "http://example.com/variable/controller/id32434242423423234?param1=321&param2=4324342"

m = re.search(r'controller/id(\d+)\?',s)
if m:    
    print "Found the id:", m.group(1)

如果您需要将值作为数字而不是字符串,则可以使用int(m.group(1))。还有很多其他方法可以做到这一点,这可能更合适,具体取决于代码的更大目标,但没有更多的上下文,很难说。

答案 1 :(得分:3)

>>> import urlparse
>>> res=urlparse.urlparse("http://example.com/variable/controller/id32434242423423234?param1=321&param2=4324342")
>>> res.path
'/variable/controller/id32434242423423234'
>>> import posixpath
>>> posixpath.split(res.path)
('/variable/controller', 'id32434242423423234')
>>> directory,filename=posixpath.split(res.path)
>>> filename[2:]
'32434242423423234'

使用urlparseposixpath对于这种情况可能过多,但我认为这是干净的方法。

答案 2 :(得分:2)

>>> s
'http://example.com/variable/controller/id32434242423423234?param1=321&param2=4324342'
>>> s.split("id")
['http://example.com/variable/controller/', '32434242423423234?param1=321&param2=4324342']
>>> s.split("id")[-1].split("?")[0]
'32434242423423234'
>>>

答案 3 :(得分:0)

虽然正则表达式是可行的,但对于简单的事情,我写了string parser。在某种程度上,是PEP 3101的字符串格式化操作的(未完成)反向操作。这非常方便,因为这意味着您不必学习另一种指定字符串的方法。

例如:

>>> 'The answer is {:d}'.format(42)
The answer is 42

解析器的反面相反:

>>> Parser('The answer is {:d}')('The answer is 42') 
42

对于您的情况,如果您想要一个int作为输出

>>> url = 'http://example.com/variable/controller/id32434242423423234?param1=321&param2=4324342'
>>> fmt = 'http://example.com/variable/controller/id{:d}?param1=321&param2=4324342'
>>> Parser(fmt)(url)
32434242423423234

如果你想要一个字符串:

>>> fmt = 'http://example.com/variable/controller/id{:s}?param1=321&param2=4324342'
>>> Parser(fmt)(url)
32434242423423234

如果你想在字典中捕捉更多东西:

>>> fmt = 'http://example.com/variable/controller/id{id:s}?param1={param1:s}&param2={param2:s}'
>>> Parser(fmt)(url)
{'id': '32434242423423234', 'param1': '321', 'param2': '4324342'}

或在元组中:

如果你想在字典中捕捉更多东西:

>>> fmt = 'http://example.com/variable/controller/id{:s}?param1={:s}&param2={:s}'
>>> Parser(fmt)(url)
('32434242423423234', '321', '4324342')

试一试,托管here