Python - извлекает важную строковую информацию - PullRequest
1 голос
/ 06 марта 2011

У меня есть следующая строка

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

Как наилучшим образом извлечь значение id, в данном случае - 32434242423423234

Regardz, Mladjo

Ответы [ 4 ]

8 голосов
/ 06 марта 2011

Вы можете просто использовать регулярное выражение , например:

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)).Есть много других способов сделать это, которые могут быть более подходящими, в зависимости от более широкой цели вашего кода, но без большего контекста трудно сказать.

3 голосов
/ 06 марта 2011
>>> 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'

Использование urlparse и posixpath может быть слишком много для этого случая, но я думаю, что это чистый способ сделать это.

2 голосов
/ 06 марта 2011
>>> 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'
>>>
0 голосов
/ 31 августа 2011

Несмотря на то, что Regex - это путь, для простых вещей я написал анализатор строк .В некотором смысле, это (неполная) обратная операция операции форматирования строки с 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

Если вы хотите захватить больше вещей в dict:

>>> 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')

Попробуйте, он размещен здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...