2016-11-11 1 views
0

Я использую Jupyter Notebook, чтобы получить docid = PE209374738 в качестве моего вывода, используя reg ex. В настоящее время он хранится в словаре в таком формате: {'Url': 'https://backtoschool.com/document.php?docid=PE209374738&datasource=PHE&vid=3326&referrer=api'}.Python- регулярное выражение для печати слова в пределах ссылки

Это мой код:

results= xmldoc.getElementsByTagName("result") 
dict= {} 
for a in results: 
    url= 'Url' 
    dict[url] = a.getElementsByTagName("url")[0].childNodes[0].nodeValue 
    docid= re.search(r'\?(.*?)&') 

Кто-нибудь есть какие-либо предложения о том, как печатать, что идентификатор?

ответ

3

В стандартной библиотеке уже есть методы для правильной обработки URL-адресов, нет необходимости в регулярном выражении.

В Python 3:

from urllib.parse import urlparse, parse_qs 

url = 'https://backtoschool.com/document.php?docid=PE209374738&datasource=PHE&vid=3326&referrer=api' 
print(parse_qs(urlparse(url).query)['docid'][0]) # PE209374738 

В Python 2, первая строка:

from urlparse import urlparse, parse_qs 
2

@ Alex-зал является правильным, вы, вероятно, следует лучше анализировать это, используя правильный URL-анализатор.

Тем не менее, ваш первоначальный вопрос был делать это с помощью регулярных выражений, так вот решение (которое вы почти прибил уже):

s = 'https://backtoschool.com/document.php?docid=PE209374738&datasource=PHE&vid=3326&referrer=api' 
m = re.search(r'\?docid=(.*?)&', s) 
print m.groups()[0] 

Это будет печатать нужный PE209374738.